के पोस्ट-मॉर्टम डिबगिंग मेरे पास एक बड़ा प्रोग्राम है, जो सी # में लिखा गया है और मोनो का उपयोग करके लिनक्स सिस्टम पर चल रहा है, जो कभी-कभी क्रैश होता है और mono.bin
प्रक्रिया को कोर डंप करने का कारण बनता है।मोनो एओटी-संकलित प्रोग्राम
मैंने कुछ कोर डंप फ़ाइलों पर gdb
चलाया, लेकिन यह बहुत उपयोगी नहीं था क्योंकि बैकट्रैस में सी # कार्यों के नाम नहीं हैं। this discussion I found के अनुसार:
यह काम नहीं करेगा। प्रबंधित स्टैक निशान बनाने के लिए आवश्यक जानकारी रनटाइम डेटा संरचनाओं में निहित है, और यह प्रोग्राम चल रहा है, जबकि यह केवल उपलब्ध है। आप अपने आवेदन, एओटी कर सकते हैं तो आपके पास अधिक उपयोग करने योग्य स्टैक निशान होंगे।
तो, मैंने किया। मैं अपने सभी सी # डीएलएल और EXE फ़ाइलों को एओटी संकलित किया। --aot=write-symbols
विकल्प का उपयोग करना। मेरे प्रोग्राम के एक परीक्षण संस्करण के लिए crashes on purpose ताकि मैं जांच कर सकूं कि इससे बैकट्रैक अधिक उपयोगी हो जाता है या नहीं। और अब तक, यह नहीं है। मुख्य थ्रेड से पश्व-अनुरेखन लगता है:
#0 0xb7fc8402 in __kernel_vsyscall()
#1 0x00556df0 in raise() from /lib/libc.so.6
#2 0x00558701 in abort() from /lib/libc.so.6
#3 0x080e59b5 in ??()
एक और धागा है:
#0 0xb7fc8402 in __kernel_vsyscall()
#1 0x005f6753 in poll() from /lib/libc.so.6
#2 0xb6f735a7 in Mono_Unix_UnixSignal_WaitAny()
from /opt/novell/mono/lib/libMonoPosixHelper.so
#3 0xb5416578 in ??()
और अन्य थ्रेड निष्क्रिय होता हुआ प्रतीत (में nanosleep
, pthread_cond_timedwait
, pthread_cond_wait
, sem_timedwait
, या sem_wait
)। लेकिन सभी बैकट्रैस की बात आम है कि वे उस परेशान in ??()
के साथ समाप्त होते हैं, और कभी भी "मेरे" कोड से किसी भी फ़ंक्शन नाम सूचीबद्ध नहीं करते हैं।
मुझे लगता है कि यह कुछ संदेशों से संबंधित है जो gdb
प्रारंभ होने पर मुद्रित होते हैं; उदाहरण के लिए,
Reading symbols from /xyz/mono/log4net.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/log4net.dll.so
Reading symbols from /xyz/mono/Contoso.Util.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/Contoso.Util.dll.so
Reading symbols from /xyz/mono/Contoso.Printing.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/Contoso.Printing.dll.so
Reading symbols from /xyz/mono/Contoso.LegacyDataConverter.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/Contoso.LegacyDataConverter.dll.so
क्यों सब *.dll.so
फ़ाइलें "कोई डिबगिंग प्रतीकों मिला" किया है? क्या डीएलएल को खुद को "डीबग" मोड या कुछ में बनाया जाना चाहिए?
और अधिक आम तौर पर, मोनो कोर डंप से प्रबंधित स्टैक ट्रेस प्राप्त करने का कोई तरीका है? (mono_pmip
का उपयोग कर, क्योंकि वह ही उपलब्ध है जब प्रक्रिया चल रहा है बिना।)
"मोनो रनटाइम - डिबगिंग प्रतीकों" या इसी तरह के आपके भंडार में एक पैकेज होना चाहिए। इसे ढूंढें, इसे इंस्टॉल करें और फिर डीबगिंग का प्रयास करें। –
'मोनो-एडन-कोर-डीबगिनोफो' नामक एक पैकेज है (सेंटोस के लिए)। मुझे लगता है कि यह है। – dan04
यदि आप वास्तव में इसे ठीक नहीं कर सकते हैं तो आखिरी खाई के प्रयास के रूप में आप ऐप को 'वाइन' के तहत चला सकते हैं? आदर्श समाधान नहीं है लेकिन यदि आप वास्तव में अटक गए हैं तो यह काम कर सकता है। – Rots