मैंने इसे स्वयं here लागू किया।
प्रारंभ में, मैं here सुझाव के रूप में, यानी किसी भी तरह धागे के शीर्ष फ्रेम सूचक हो रही है और तनाव मुक्त इसे मैन्युअल रूप से (लिंक किए गए स्रोत सेब से ली गई है backtrace
कार्यान्वयन, इस प्रकार एप्पल विशिष्ट हो सकता है कुछ इसी तरह लागू करने के लिए चाहता था, लेकिन विचार सामान्य है)।
हालांकि, यह सुरक्षित रखने के लिए (और उपर्युक्त स्रोत किसी भी तरह से टूटा नहीं जा सकता है), आपको अपने ढेर तक पहुंचने के दौरान थ्रेड को निलंबित करना होगा। मैंने धागे को निलंबित करने के विभिन्न तरीकों के लिए चारों ओर खोज की और this, this और this पाया। असल में, वास्तव में कोई अच्छा तरीका नहीं है। आम हैक, used by the Hotspot JAVA VM, सिग्नल का उपयोग करना और pthread_kill के माध्यम से अपने धागे पर कस्टम सिग्नल भेजना है।
तो, के रूप में मैं इस तरह की आवश्यकता होगी वैसे भी संकेत हैक, मैं यह थोड़ा आसान हो सकता है और सिर्फ बुलाया संकेत हैंडलर जो लक्ष्य सूत्र में निष्पादित किया जाता है अंदर backtrace
का उपयोग करें (के रूप में भी here by sandeep सुझाव दिया)। यह मूल रूप से मेरा कार्यान्वयन कर रहा है।
आप भी पश्व-अनुरेखन मुद्रण में रुचि रखते हैं, अर्थात कुछ उपयोगी डिबगिंग जानकारी (समारोह नाम, स्रोत कोड फ़ाइल नाम, स्रोत कोड लाइन नंबर, ...) मिलता है, libbfd के आधार पर एक विस्तारित backtrace_symbols
के बारे में here पढ़ें। या बस स्रोत here देखें।
यह वही नहीं है जो मैं खोज रहा था, लेकिन यह एक अच्छा विचार है। मुझे लगता है कि मैं इसका इस्तेमाल कर सकता हूं। धन्यवाद! –
@Alexander यह समाधान आपके लिए काम कर रहा है जब मॉलोक या कॉल जैसी निःशुल्क कॉल स्टैक है ..? और क्या आप सिग्नल हैंडलर से इस मामले में बैकट्रैक() को कॉल करने में सक्षम हैं? मुझे दुर्घटना हो रही है। – sandeep
आखिरकार, मैंने libunwind के साथ काम करने का फैसला किया। यह समाधान मेरे परिस्थितियों के लिए बहुत जटिल है और मैंने इसे छोड़ने का फैसला किया। वैसे भी, अगर आप इसे किसी भी तरह से काम करते हैं तो कृपया यहां पोस्ट करें। –