2011-06-28 19 views
9

मेरे पास एक एप्लिकेशन के लिए कई यूनिट परीक्षण हैं, जिनमें से प्रत्येक .gcda फ़ाइलों को उत्पन्न करने में सक्षम है। मैं एकीकृत .gcda फ़ाइलों को उत्पन्न करने में सक्षम होना चाहता हूं जो पूरी तरह से मेरे परीक्षण सूट के कवरेज का प्रतिनिधित्व करते हैं। ऐसा करने का एक आसान तरीका प्रतीत नहीं होता है, लेकिन मैं गलत हो सकता हूं, और इसलिए मैं पूछ रहा हूं।क्या दो .gcda फ़ाइलों को एक में विलय करने का कोई तरीका है?

With gcov, is it possible to merge to .gcda files? पहले पूछा गया था और समाधान lcov .info फ़ाइलों में कनवर्ट करना था और उस तरह से विलय करना था। यदि संभव हो, तो मैं मर्ज ऑपरेशन का आउटपुट अभी भी एक एकल .gcda फ़ाइल होना चाहता हूं ताकि मुझे lcov का उपयोग करने के लिए मजबूर नहीं किया जा सके।

उत्तर

4

.gcda फ़ाइलों को मर्ज करने के लिए कोड है लेकिन दुर्भाग्य से इसे libgcov.a में दफनाया गया है जो जीसीसी के हिस्से के रूप में बनाता है। यदि आप बाहर निकलें (या किसी भी तरह से __gcov_flush() का आह्वान करें) कवरेज के साथ संकलित एक प्रोग्राम वास्तव में पूर्व-मौजूदा .gcda फ़ाइलों का पता लगाएगा, उन्हें लोड करेगा, चल रहे प्रोग्राम के डेटा के साथ अपने डेटा को समेकित करेगा, और इसे वापस सहेज देगा। मुझे किसी भी उपकरण की जानकारी नहीं है जो कमांड लाइन पर उस कार्यक्षमता प्रदान करता है। यहां तक ​​कि libgcov.a के साथ भी आप जो भी चाहते हैं उसे करने के लिए आपके पास कोई उपयोगी हुक नहीं है और उसे जीसीसी-कोर वितरण से स्रोत लेना होगा और इसे संशोधित करना होगा।

मैंने अतीत में जो किया है वह सिर्फ सभी डेटा एनोटेटेड स्रोत (.gcov) और उस स्तर पर कुल निकालने के लिए निकाला गया है। .gcda प्रारूप लाइन कवरेज जानकारी (जैसे शाखा गणना) से बहुत अधिक स्टोर करने में सक्षम है और libgcov.a एकत्रीकरण जानता है कि उनको कैसे जोड़ना है (कुछ के लिए यह संक्षेप में उतना आसान नहीं है)।

1

मैंने अभी एक परीक्षण प्रोजेक्ट बनाया है जो दिखाता है, AFAIKT, जब एक एकल परीक्षण अनुप्रयोग विभिन्न मानकों के साथ क्रमशः चल रहा है, तो gcda फ़ाइलों को रनों के बीच अद्यतन किया जाता है और एक बार gcov चल रहा है (मैं gcovr.py का उपयोग करता हूं) कुल कवरेज जानकारी उत्पन्न करता है ।

संबंधित मुद्दे

 संबंधित मुद्दे