जीएनयू gprof का उपयोग कर लिनक्स में एक सी प्रोग्राम कैसे प्रोफाइल करें
प्रदर्शन सॉफ्टवेयर विकसित करते समय प्रदर्शन सबसे बड़ी चुनौतियों में से एक है। यही कारण है कि कोड प्रोफाइलिंग सॉफ्टवेयर विकास के सबसे महत्वपूर्ण पहलुओं में से एक है, क्योंकि यह आपको बाधाओं, मृत कोड और यहां तक कि बग की पहचान करने देता है। यदि आप एक प्रोग्रामर हैं जो लिनक्स के लिए सॉफ्टवेयर एप्लीकेशन विकसित करता है, तो जीएनयू प्रोफाइलर "gprof" देखने के लिए टूल है।
डाउनलोड करो और इंस्टॉल करो
ग्रुपोफ़ अधिकांश लिनक्स वितरण के साथ पूर्व-स्थापित होता है, लेकिन यदि यह आपके लिनक्स डिस्ट्रो के मामले में नहीं है, तो आप इसे कमांड लाइन पैकेज मैनेजर जैसे apt-get
yum
या yum
माध्यम से डाउनलोड और इंस्टॉल कर सकते हैं। उदाहरण के लिए, डेबियन-आधारित सिस्टम पर gprof को डाउनलोड और इंस्टॉल करने के लिए निम्न आदेश चलाएं:
sudo apt-binutils स्थापित करें
आवश्यकताएँ
प्रोफाइलिंग डेटा उत्पन्न करने के लिए gprof का उपयोग करने से पहले, सुनिश्चित करें कि आपके प्रोग्राम निष्पादन योग्य में प्रोफाइलर द्वारा उचित रूप से कार्य करने के लिए आवश्यक अतिरिक्त जानकारी शामिल है। यह आपके कोड को संकलित करते समय -pg
कमांड लाइन विकल्प जोड़कर हासिल किया जा सकता है, यह मानते हुए कि आप gcc
कंपाइलर का उपयोग कर रहे हैं। यदि आप संकलन और लिंकिंग के लिए अलग-अलग कमांड का उपयोग कर रहे हैं, तो कमांड लाइन विकल्प दोनों कमांड में जोड़ें।
Gprof का उपयोग करना
उदाहरण के रूप में निम्नलिखित सी प्रोग्राम पर विचार करें:
# अंतर्निहित शून्य func2 () {int count = 0; के लिए (गिनती = 0; गिनती <0XFFFFF; गिनती ++); वापसी; } शून्य func1 (शून्य) {int count = 0; के लिए (गिनती = 0; गिनती <0XFF; गिनती ++) func2 (); वापसी; } int मुख्य (शून्य) {printf ("\ n हैलो वर्ल्ड! \ n"); func1 (); func2 (); वापसी 0; }
जैसा कि पिछले खंड में वर्णित है, -pg
विकल्प के साथ कोड संकलित करें:
gcc -Wall -pg test.c -o परीक्षण
संकलित हो जाने के बाद, प्रोग्राम चलाएं:
।/परीक्षा
सफल निष्पादन के बाद, कार्यक्रम "gmon.out" नाम की एक फ़ाइल तैयार करेगा जिसमें प्रोफाइलिंग जानकारी होगी, लेकिन कच्चे रूप में, जिसका अर्थ है कि आप फ़ाइल नहीं खोल सकते हैं और सीधे जानकारी पढ़ सकते हैं। मानव पठनीय फ़ाइल उत्पन्न करने के लिए, निम्न आदेश चलाएं:
gprof test gmon.out> prof_output
यह आदेश मानव पठनीय प्रारूप में सभी profiling जानकारी "prof_output" फ़ाइल में लिखता है। ध्यान दें कि आप अपनी सुविधा के अनुसार आउटपुट फ़ाइल नाम बदल सकते हैं।
फ्लैट प्रोफ़ाइल और कॉल ग्राफ
यदि आप प्रोफाइलिंग डेटा वाली फ़ाइल खोलते हैं, तो आप देखेंगे कि जानकारी दो भागों में विभाजित है: फ्लैट प्रोफाइल और कॉल ग्राफ़। जबकि पूर्व में फंक्शन कॉल गिनती, फ़ंक्शन में बिताए गए कुल निष्पादन समय, और अधिक के विवरण शामिल हैं, बाद में प्रोग्राम के कॉल पेड़ का वर्णन करता है, जो किसी विशेष फ़ंक्शन के माता-पिता और बाल कार्यों के बारे में विवरण प्रदान करता है।
उदाहरण के लिए, हमारे मामले में फ्लैट प्रोफ़ाइल निम्नलिखित है:
प्रत्येक नमूना 0.01 सेकंड के रूप में गिना जाता है। % संचयी स्वयं स्वयं कुल समय सेकंड सेकंड कॉल एमएस / कॉल एमएस / कॉल नाम 100.00 0.94 0.94 256 3.67 3.67 func2 0.00 0.94 0.00 1 0.00 936.33 func1
नीचे कॉल ग्राफ़ है:
सूचकांक% समय स्वयं बच्चों को नाम 0.00 0.00 1/256 मुख्य [2] 0.94 0.00 255/256 func1 [3] [1] 100.0 0.94 0.00 256 func2 [1] -------------- --------------------------------- [2] 100.0 0.00 0.94 मुख्य [2] 0.00 0.94 1/1 func1 [ 3] 0.00 0.00 1/256 func2 [1] --------------------------------------- -------- 0.00 0.94 1/1 मुख्य [2] [3] 99.6 0.00 0.94 1 func1 [3] 0.94 0.00 255/256 func2 [1] ------------- ----------------------------------
ध्यान दें कि इन फ़ील्ड का विस्तृत विवरण फ़ाइल में प्रोफाइलिंग जानकारी (प्रोफाइल में prof_output) मौजूद है और जब भी प्रोफाइलर चलाया जाता है तब उत्पन्न होता है। विवरण बंद करने के लिए, gprof
कमांड के साथ -b
कमांड लाइन विकल्प का उपयोग करें।
कुछ महत्वपूर्ण अंक
gmon.out
फ़ाइल को सही तरीके से लिखने के लिए, आपका प्रोग्राम सामान्य रूप से बाहर निकलना चाहिए। फ़ाइल तब उत्पन्न नहीं होती है जब प्रोग्राम या तो_exit()
फ़ंक्शन को कॉल करके बाहर निकलता है या असामान्य रूप से एक गैर-संभाल सिग्नल के कारण समाप्त हो जाता है।- "Gmon.out" फ़ाइल हमेशा मौजूदा कार्य निर्देशिका में बनाई जाती है। इसलिए, सुनिश्चित करें कि वर्तमान प्रोग्राम में फ़ाइल बनाने के लिए आपके प्रोग्राम में पर्याप्त विशेषाधिकार हैं।
- Gprof2dot के नाम से एक बाहरी उपकरण का उपयोग ग्राफ़ ग्राफ से ग्राफ़िकल रूप में कॉल ग्राफ़ को रूपांतरित करने के लिए किया जा सकता है।
- Gprof का उपयोग करके, आप एक एनोटेटेड स्रोत सूची भी बना सकते हैं जो प्रोग्राम की प्रत्येक पंक्ति को निष्पादित करने की संख्या के बारे में एक विचार देता है। इस जानकारी का उत्पादन करने के लिए, प्रोग्राम को
-g
(-pg
विकल्प के साथ पहले समझाया गया) के साथ संकलित करें और-g
-pg
कमांड लाइन विकल्प के साथ-pg
कमांड चलाएं।