मैं gcov टूल के आउटपुट को समझने की कोशिश कर रहा हूं। इसे बिना किसी विकल्प के चलाना समझ में आता है, लेकिन मैं शाखा कवरेज विकल्पों को आजमाकर समझना चाहता हूं। दुर्भाग्य से यह समझना मुश्किल है कि शाखाएं क्या करती हैं और उन्हें क्यों नहीं लिया जाता है। नीचे एक विधि के लिए आउटपुट है (नवीनतम एलएलवीएम/क्लैंग बिल्ड का उपयोग करके संकलित करें)। , एक खाली सरणी, 1 वस्तु के साथ एक सरणी और सरणी 2 वस्तुओं के साथ और 4 वस्तुओं के साथ एक सरणीgcov फ़ाइलों में शाखाओं को समझना
function -[TestCoverageAppDelegate loopThroughArray:] called 5 returned 100% blocks executed 88%
5: 30:- (NSInteger)loopThroughArray:(NSArray *)array {
5: 31: NSInteger i = 0;
22: 32: for (NSString *string in array) {
branch 0 taken 0
branch 1 taken 7
-: 33:
22: 34: }
branch 0 taken 4
branch 1 taken 3
branch 2 taken 0
branch 3 taken 3
5: 35: return i;
-: 36:}
मैं इस के माध्यम से 5 परीक्षण चलाने की है, शून्य में गुजर। मुझे लगता है कि पहले मामले में, शाखा 1 का अर्थ है "लूप में जाना" लेकिन मुझे कोई संकेत नहीं है कि शाखा 0 क्या है। दूसरे मामले में शाखा 0 फिर से लूप प्रतीत होता है, शाखा 1 लूप समाप्त हो रहा है और शाखा 3 लूप से बाहर/बाहर निकल रहा है, लेकिन मुझे नहीं पता कि शाखा 2 क्या है या क्यों/इसे कब निष्पादित किया जाएगा।
यदि कोई जानता है कि शाखा की जानकारी को कैसे समझें, या किसी भी विस्तृत दस्तावेज़ीकरण के बारे में क्या पता है, तो मैं मदद की सराहना करता हूं।
अपने फ़ंक्शन की असेंबली प्राप्त करने का प्रयास करें और इसमें 'j **' निर्देशों की संख्या जांचें। – osgx
मेरी असेंबली बहुत अच्छी नहीं है लेकिन ऐसा लगता है कि 4 हैं। पहला एक जे है जो मुझे लगता है कि लूप पर छोड़ने पर कोई ऑब्जेक्ट नहीं है। फिर एक और जे जो एक गणना उत्परिवर्तन अपवाद पर छोड़ देता है, एक जेबी जिसे मुझे नहीं पता है, लेकिन लूप के शीर्ष पर वापस चला जाता है और फिर एक जेन जो मुझे लगता है कि लूप के शीर्ष पर चलता है यदि गणना करने के लिए वस्तुओं को छोड़ दिया जाता है। दिलचस्प बात यह है कि उत्परिवर्तन पहली शाखा 0 को लेने का कारण बनता है, जो एक रहस्य हल करता है, लेकिन शाखा 2 अभी भी मुझे –
हम्म को बढ़ाता है .. अन्य संभावित मामला ऑब्जेक्ट फ़ाइल को अलग करना है, जिसे '-pg' (gcov चलने के लिए) के साथ संकलित किया गया था। आपको इस तरह के disassembly में कुछ gcov उपकरण कार्यों के लिए कॉल देखना चाहिए .. "__llvm_gcov_ctr" वृद्धि या "__llvm_gcda_edge" कॉल की तरह smth। साथ ही, क्या आपने 'ओ0' पर' -फनो-इनलाइन 'के साथ संकलित किया था? – osgx