lcov

2012-09-10 5 views
10

के लिए शाखा कवरेज डेटा उत्पन्न करना मैं कोड कवरेज मेट्रिक्स के लिए lcov का उपयोग करने का प्रयास कर रहा हूं, लेकिन मुझे काम करने के लिए शाखा कवरेज नहीं मिल रहा है।lcov

यहाँ कैसे मैं इसे का उपयोग कर रहा है:

g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test 
lcov --zerocounters --directory $PWD 
lcov --capture --initial --directory $PWD --output-file coverage_output 
./bin/test 
lcov --no-checksum --directory $PWD --capture --output-file coverage_output 
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output 

लेकिन मैं मिलता है:

कुल मिलाकर कवरेज दर:
लाइनों ......: 100.0% (60 से 60 की तर्ज)
कार्यों ..: 100.0% (26 26 के कार्यों)
शाखाओं ...: कोई डेटा नहीं मिला

कोई विचार?

उत्तर

1

क्षमा करें, एक पुष्टि के रूप में इतना "विचार" नहीं है कि आप सब कुछ सही तरीके से कर रहे हैं। आपके सटीक आदेश इस सरल कोड पर काम करते हैं:

#include <iostream> 
using namespace std; 

bool foo(int i) 
{ 
    if (i != 0) { 
     return 12/i; 
    } else { 
     return 0; 
    } 
} 

int main(int argc, char** argv) 
{ 
    cout << foo(argc) << endl; 
    return 0; 
} 

एलसीओवी कवरेज तालिका में लाइनों, कार्यों और शाखाओं के आंकड़े हैं। हो सकता है कि आप वास्तव में सही आउटपुट एचटीएमएल देख रहे हों?

+0

हाय टॉम, आपका उदाहरण मेरे लिए भी काम नहीं करता है। कमांड आउटपुट कहता है "शाखाएं ...: कोई डेटा नहीं मिला", इसलिए मुझे नहीं लगता कि मुझे HTML में कुछ याद आ रहा है। लेकिन, धन्यवाद !, यदि आप मेरे आदेशों का उपयोग कर शाखा डेटा देख सकते हैं तो शायद एक इंस्टॉलेशन समस्या या उपकरण के बारे में कुछ है .. – Hugo

+0

आपने संभवतः पुराने एलसीओवी संस्करण (<1.11) का उपयोग किया था जहां शाखा डेटा संग्रह सक्षम किया गया था, डिफ़ॉल्ट रूप से । – maxschlepzig

19

डिफ़ॉल्ट रूप से एलसीओवी अक्षम शाखा कवरेज का नवीनतम संस्करण।

आप इसे या तो द्वारा पुन: सक्षम करने की जरूरत है:

  • अपने .lcovrc फ़ाइल (से/etc/lcovrc की नकल की) संपादन 1
  • अपने lcov कमांड लाइन के लिए --rc lcov_branch_coverage=1 जोड़ने के लिए lcov_branch_coverage सेटिंग बदलने के लिए
+4

अभय जोशी ने नीचे कहा: याद रखें कि प्रत्येक एकल एलसीओवी आमंत्रण पर --आरसी लाइन जोड़ना याद रखें, अन्यथा यह शाखा आंकड़ों को छोड़ देगा। इसके अलावा, genhtml विकल्प है --rc genhtml_branch_coverage = 1 – garph0

+1

क्या आप, मौके से, उस परिवर्तन के लिए तर्क जानते हैं? सहजता से यह बहुत गलत लगता है। – Griwes

+0

2012 में शाखा डेटा का संग्रह अक्षम कर दिया गया था (यानी lcov संस्करण 1.11)।इस सुविधा को सक्षम करते समय परिवर्तन कुछ संभावित प्रदर्शन प्रभावों को नोट करता है (https://github.com/linux-test-project/lcov/commit/263de2b40e21193ef8d11e899eb55aa52b17225d)। यह कितना ध्यान देने योग्य है आपके कार्यक्रम के आकार पर निर्भर करता है। आमतौर पर, यह एक मुद्दा नहीं होना चाहिए। – maxschlepzig

0

इस post पर आधारित, यह अंतर आपके द्वारा उपयोग किए जा रहे जीसीसी के संस्करण पर निर्भर हो सकता है। क्या आप साझा कर सकते हैं कि आप कौन से संस्करणों का उपयोग कर रहे हैं। मैं पर शाखा कवरेज नहीं मिल रहा है:

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) 
+0

लगता है यह एक और मुद्दा है: संस्करण स्ट्रिंग यह इंगित करती है कि यह ऐप्पल से कुछ एलएलवीएम क्लैंग संस्करण है जिसका उपयोग जीसीसी के बजाय किया जाता है। और एलएलवीएम पुराने प्रारूप संस्करण में कवरेज डेटा उत्पन्न करने के लिए जाना जाता है जो आम तौर पर एलसीओवी की अपेक्षा करता है। – maxschlepzig

3

.lcovrc फ़ाइलें सेटिंग्स lcov फ़ाइल की राह में रखना आवश्यक है की फ़ाइल है। वाकई, मैंने इस फाइल के उपयोग पर ज्यादा शोध नहीं किया।

आप "--rc lcov_branch_coverage = 1" सभी कॉल्स के लिए lcov के रूप में अतिरिक्त पैरामीटर जोड़ना। अपने मामले में इस पैरामीटर को अपने सभी तीन कॉल में जोड़ें। यदि आप एक याद करते हैं, तो यह शाखा कवरेज छोड़ देगा।

इसके अलावा - जेनएचटीएमएल के लिए ब्रैंच-कवरेज की आवश्यकता है।

+0

दुर्भाग्य से, मुझे 'geninfo: नोट: - प्रारंभिक शाखा कवरेज डेटा उत्पन्न नहीं करता है', इसलिए उनमें से कम से कम एक शाखा कवरेज के साथ नहीं चलेगा। –