gcc
कोड कवरेज: gcov
खोज…
टिप्पणियों
जीसीसी यहाँ gcov के कुछ प्रलेखन प्रदान करते हैं
Gcovr और Lcov का उपयोग कवरेज परिणामों को उत्पन्न करने और सारांशित करने में मदद करने के लिए किया जा सकता है
परिचय
कोड कवरेज एक माप है जिसका उपयोग प्रत्येक स्रोत कोड स्टेटमेंट और शाखा को कितनी बार किया जाता है। टेस्ट सूट को चलाते समय यह उपाय आमतौर पर आवश्यक होता है ताकि यह सुनिश्चित किया जा सके कि परीक्षण सूट द्वारा यथासंभव कोड का परीक्षण किया जाता है। यह कोड हॉट-स्पॉट निर्धारित करने के लिए प्रोफाइलिंग के दौरान भी उपयोग किया जा सकता है और इस प्रकार जहां अनुकूलन प्रयासों का सबसे अधिक प्रभाव हो सकता है।
जीसीसी कोड में जीसीओवी उपयोगिता द्वारा कवरेज प्रदान किया जाता है। gcov विशेष झंडे के साथ gcc के साथ संकलित कोड के साथ ही काम करता है। बहुत कम अन्य संकलक हैं जिनके साथ gcov बिल्कुल काम करता है।
संकलन
Gcov का उपयोग करने से पहले, स्रोत कोड को दो झंडे, -fprofile-arcs और -ftest-coverage का उपयोग करके gcc के साथ संकलित किया जाना चाहिए। यह संकलक को gcov द्वारा आवश्यक जानकारी और अतिरिक्त ऑब्जेक्ट फ़ाइल कोड उत्पन्न करने के लिए कहता है।
gcc -fprofile-arcs -ftest-coverage hello.c
लिंकिंग को -fprofile-arcs ध्वज का भी उपयोग करना चाहिए।
उत्पादन उत्पन्न करें
कवरेज की जानकारी उत्पन्न करने के लिए संकलित कार्यक्रम को निष्पादित किया जाना चाहिए। एक परीक्षण सूट के लिए कोड कवरेज बनाते समय यह निष्पादन चरण सामान्य रूप से परीक्षण सूट द्वारा किया जाएगा ताकि कवरेज यह दिखाए कि कार्यक्रम के कौन से हिस्से परीक्षण निष्पादित करते हैं और जो वे नहीं करते हैं।
$ a.out
प्रोग्राम को निष्पादित करने से ऑब्जेक्ट में फ़ाइल के समान निर्देशिका में एक .gcda फ़ाइल उत्पन्न होगी।
इसके बाद आप प्रोग्राम के स्रोत फ़ाइल नाम के साथ gcov को प्रत्येक पंक्ति के निष्पादन की आवृत्ति के साथ कोड की लिस्टिंग का उत्पादन करने के तर्क के रूप में कह सकते हैं।
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
परिणाम .gcov फ़ाइल में समाहित है। यहाँ एक नमूना है:
-: 0:Source:hello.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
1: 4:{
1: 5: int i;
-: 6:
1: 7: i = 0;
-: 8:
-: 9:
1: 10: if (i != 0)
#####: 11: printf ("Goodbye!\n");
-: 12: else
1: 13: printf ("Hello\n");
1: 14: return 0;
-: 15:}
यहां आप पंक्ति संख्या और स्रोत और निष्पादित प्रत्येक पंक्ति की संख्या देख सकते हैं। यदि कोई लाइन निष्पादित नहीं करती है तो इसे ##### से चिह्नित किया जाता है।
निष्पादन मायने रखता है संचयी। यदि .gcda फ़ाइल को हटाए बिना उदाहरण प्रोग्राम को फिर से निष्पादित किया गया था, तो स्रोत में प्रत्येक पंक्ति की संख्या की संख्या को निष्पादित किया गया था जो पिछले रन के परिणामों में जोड़ा जाएगा।