हमारे पास एक एमआईपी कोर पर चल रहे लिनक्स कर्नेल का एक एम्बेडेड संस्करण है। हमने जो कार्यक्रम लिखा है वह एक विशेष परीक्षण सूट चलाता है। तनाव परीक्षणों में से एक के दौरान (लगभग 12 घंटे तक चलता है) हमें सीजी गलती मिलती है। यह बदले में कोर डंप उत्पन्न करता है।लिनक्स को सी प्रोग्राम में क्रैश होने पर बेहतर डीबग प्राप्त करना
दुर्भाग्यवश कोर डंप बहुत उपयोगी नहीं है। क्रैश कुछ सिस्टम लाइब्रेरी में है जो गतिशील रूप से जुड़ा हुआ है (शायद pthread या glibc)। क्योंकि यह केवल दुर्घटना बिंदु पता चलता है और कोई अन्य कॉल कोर डंप में पश्व-अनुरेखन उपयोगी नहीं है (हमारे उपयोगकर्ता अंतरिक्ष अनुप्रयोग जी -O0 साथ बनाया गया है, लेकिन अभी भी कोई वापस ट्रेस जानकारी):
Cannot access memory at address 0x2aab1004
(gdb) bt
#0 0x2ab05d18 in ??()
warning: GDB can't find the start of the function at 0x2ab05d18.
GDB is unable to find the start of the function at 0x2ab05d18
and thus can't determine the size of that function's stack frame.
This means that GDB may be unable to access that stack frame, or
the frames below it.
This problem is most likely caused by an invalid program counter or
stack pointer.
However, if you think GDB should simply search farther back
from 0x2ab05d18 for code which looks like the beginning of a
function, you can increase the range of the search using the `set
heuristic-fence-post' command.
एक और दुर्भाग्यपूर्ण -नेस यह है कि हम gdb/gdbserver नहीं चला सकते हैं। gdb/gdbserver __nptl_create_event पर तोड़ता रहता है। यह देखते हुए कि परीक्षण धागे, टाइमर बनाता है और हर 5s को नष्ट करता है, उन पर जारी रखने के लिए लंबे समय तक बैठना लगभग असंभव है।
संपादित करें: एक और नोट, बैकट्रैक और बैकट्रैक_सिम्बोल्स हमारे टूलचेन पर समर्थित नहीं है।
इसलिए:
वहाँ SEG गलती और अधिक पश्व-अनुरेखन डेटा उत्पन्न, ढेर संकेत, कॉल स्टैक, आदि फँसाने का एक तरीका है?
क्या कोई .so फ़ाइल में क्रैश होने वाले कोर डंप से अधिक डेटा प्राप्त करने का कोई तरीका है?
धन्यवाद।
यदि संभव हो तो आप 'SIGSEGV 'को संभालने का प्रयास कर सकते हैं? इसकी कभी सिफारिश नहीं की जाती है, लेकिन मुझे लगता है कि इस स्थिति में आपकी मदद कर सकता है। – Stark07