2012-07-19 18 views
13

मुझे सी ++ प्रोग्राम के भीतर से addr2line (फ़ंक्शन कॉल बैकट्रैसिंग से फ़ाइल और लाइन) द्वारा प्रदान की गई जानकारी प्राप्त करने की आवश्यकता है। क्या addr2line के समान लाइब्रेरी कॉल है?क्या addr2line के लिए एक लाइब्रेरी कॉल है?

संपादित करें: मैं एक लिनक्स पर्यावरण में काम कर रहा हूं।

मुझे पता है कि मैं सीधे addr2line को कॉल कर सकता हूं और मुझे पता है कि मैं अपने प्रोग्राम में addr2line के source code का उपयोग कर सकता हूं (जो भी जीपीएल लाइसेंस प्राप्त है)। लेकिन मुझे लगता है कि लाइब्रेरी फ़ंक्शन को कॉल करना, यदि यह मौजूद है, तो क्लीनर है।

संपादित करें: मैं binutils के bfd का उपयोग करूंगा, जैसे addr2line करता है। वैसे भी बीएफडी का मतलब क्या है?

+0

libdwarf क्या आप –

+0

के लिए देख रहे हैं सुझाव के लिए धन्यवाद। मैंने बौनेडम्प की कोशिश की और यह केवल प्रिंट करता है जहां कार्यों की घोषणा की जाती है, जहां उन्हें बुलाया जाता है। हालांकि मुझे एक सभ्य दस्तावेज नहीं मिला ... – steffen

+2

'bfd' http://en.wikipedia.org/wiki/Binary_File_Descriptor_library है (हालांकि मूल रूप से यह बीएफडी के दूसरे अर्थ के लिए खड़ा था :) – ecatmur

उत्तर

6

आप फ़ंक्शन dladdr() फ़ंक्शन का प्रयास कर सकते हैं। यह प्रोग्राम के गतिशील प्रतीकों का उपयोग करता है, डीबगिंग जानकारी नहीं (gcc -rdynamic के साथ प्रोग्राम संकलित करें)।

इसके अलावा, आप backtrace लाइब्रेरी, या उच्च स्तर stacktrace लाइब्रेरी देख सकते हैं।
बिल्कुल नहीं जो आप पूछ रहे हैं, लेकिन वे उपयोगी साबित हो सकते हैं।

+1

टिप्स के लिए धन्यवाद। 'Dladdr()' के साथ मुझे केवल गतिशील रूप से लिंक किए गए कोड और केवल फ़ाइल नाम के लिए जानकारी मिलती है, रेखा नहीं, अगर मैं मैनपेज सही समझता हूं। मैं पता लगाने के लिए पहले ही बैकट्रैक का उपयोग कर रहा हूं। मुझे अब जो चाहिए वह फाइल और लाइन को पते से बाहर करने के लिए कुछ है। बैकट्रैक के लिए स्टैकट्रैक एक मात्र रैपर है। – steffen

+0

इनके अतिरिक्त, 'libunwind' लाइब्रेरी भी है: http://www.nongnu.org/libunwind/ –

2

addr2line के बीएसडी कार्यान्वयन के स्रोत कोड की जांच करें, इसमें केवल 400 लाइन कोड हैं। स्रोत को लाइब्रेरी फ़ंक्शन में बदलें बहुत आसान होना चाहिए। http://sourceforge.net/apps/trac/elftoolchain/browser/trunk/addr2line/addr2line.c

+0

अपडेट किया गया लिंक: http://sourceforge.net/p/elftoolchain/code/HEAD/tree/trunk /addr2line/addr2line.c –