2013-09-22 6 views
5

के साथ संकलन के बाद लिखा नहीं गया है gcc -pg -g का उपयोग कर एक सी ++ प्रोग्राम संकलित (कम से कम, वे मेकफ़ाइल में दिए गए तर्क हैं; क्या आदेश कमांड निष्पादित नहीं किया गया है) । सीडब्ल्यूडी के साथ मेरी होम निर्देशिका में सेट के साथ कार्यक्रम सामान्य समापन पर चला गया। कोई gmon.out फ़ाइल लिखी गई।gmon.out gcc -pg -g

जीसीसी 4.4.7 है। ओएस सेंटोस 6.

मेरा प्रोग्राम फोर्क/निष्पादन का उपयोग करके एक हाथ से लुढ़का हुआ पर्ल डिमन द्वारा लॉन्च किया गया था। मैंने सत्यापित किया है कि सीडब्लूडी मेरी होम निर्देशिका है, और यह लिखने योग्य है कि, मेरे लक्ष्य कार्यक्रम को निष्पादित करने से पहले डेमॉन touch foo निष्पादित कर रहा है। जहां तक ​​मैं शोध करने में सक्षम हूं, इसने कार्यक्रम के प्रोफाइलिंग को प्रभावित नहीं किया होगा या जब इसे समाप्त किया जाएगा तो सामान्य रूप से gmon.out लिखना चाहिए था।

उत्तर

1

हो सकता है कि आप इस महीने पहले हल कर लिया है, लेकिन मैं आज प्रभाव का सामना करना पड़ा तो मैं भावी आगंतुकों के लिए जवाब कर सकते हैं:

कोई त्रुटि संदेश दिखाया गया है, gmon.out अभी बनाया नहीं प्राप्त करता है (और विश्लेषण पाठ -फाइल खाली हो जाएगा)।

एक कारण यह हो सकता है कि यदि आपके पास main विधि नहीं है या -mwindowsWinMain के मामले में है। जैसे यदि आप कंपाइलर तर्क (gcc) -e या (vc) /entry या __main का उपयोग करते हैं।

मैंने gprof मैन्युअल को देखा लेकिन मुझे एंट्री पॉइंट कैसे बताना है इसके बारे में जानकारी नहीं मिली, इसलिए मैंने कोड बदल दिया।

5

यह एक ही मुद्दे में Ran, जी ++ 4.8.2 CentOS 7. -pg दोनों संकलन और जोड़ने के लिए मौजूद थे पर, प्रक्रिया को चलाने & यह सामान्य रूप से बाहर निकल जाता है, कोई gmon.out उत्पन्न।

मैंने _exit(status) पर exit(status) के साथ कॉल को प्रतिस्थापित करके इसे ठीक किया। ध्यान दें कि पूर्व _exit (3) है, एक सिस्टम कॉल है, और बाद वाला निकास (2), एक मानक लाइब्रेरी विधि है।

यह क्यों काम करता है? gprof मैन पेज से:

प्रोफाइल प्रोग्राम को "बाहर निकलने" (2) को कॉल करना होगा या gmon.out फ़ाइल में सहेजी जाने वाली प्रोफाइलिंग जानकारी के लिए सामान्य रूप से वापस जाना होगा।

स्पष्ट रूप से gmon.out का लेखन (उच्च स्तरीय) निकास (2) पर निर्भर है। तो, यह सुनिश्चित करने के लिए जांचें कि कोड निकास (2) (stdlib से) का उपयोग कर रहा है और _exit (3) (सिस्टम कॉल) नहीं है।

+0

धन्यवाद की जरूरत है! मेरे साथ भी ठीक यही समस्या थी। – brokenfoot

0

यह वास्तव में देर हो चुकी है, लेकिन आप में से जो लोग संघर्ष कर रहे हैं के लिए, के बाद आप -pg के साथ अपने कोड संकलन, आप निष्पादन योग्य चलाने के लिए यह उत्पन्न करने के लिए के लिए gmon.out