2017-02-06 10 views
24

मेरे पास एक .NET अनुप्रयोग है जिसे मैंने .NET कोर पर पोर्ट किया है। मैं उबंटू 14.04 पर इसका परीक्षण कर रहा हूं।लिनक्स पर एक .NET कोर एप्लिकेशन को डंप कैसे करें

मैं यह पता लगाने की कोशिश कर रहा हूं कि प्रोग्राम को क्रैश होने पर .dmp फ़ाइल या लिनक्स समकक्ष कैसे प्राप्त करें। मैं Environment.FailFast पर कॉल करता हूं लेकिन जहां तक ​​मैं यह कह सकता हूं कि यह एक .dmp फ़ाइल उत्पन्न नहीं करता है जैसे कि यह विंडोज पर करता है। this caseEnvironment.FailFast पर एक डंप बनाना चाहिए, लेकिन यदि यह है तो मुझे यह नहीं मिल रहा है।

इसके अतिरिक्त मैंने gcore का उपयोग करके मैन्युअल रूप से डंप बनाने का प्रयास किया है। यह काम करता है हालांकि डंप उत्पन्न करने में काफी समय लगता है (मेरा आवेदन इतना बड़ा नहीं है) और मैं इस तथ्य के बाद जीडीबी में सही कॉलस्टैक प्राप्त करने में असमर्थ हूं क्योंकि जब मैं अपने आवेदन डीएलडी को जीडीबी इंगित करता हूं तो यह इसे पहचान नहीं पाता है ।

लिनक्स पर .NET कोर एप्लिकेशन का डंप प्राप्त करने का वह सबसे अच्छा तरीका क्या है?

धन्यवाद!

+0

आप '/ var/crash' में एक प्रविष्टि है:

यहाँ एक ब्लॉग पोस्ट जो कैसे बना सकते हैं और लिनक्स के तहत नेट कोर coredumps का विश्लेषण करने से पता चलता है? जब कोई एप्लिकेशन दुर्घटनाग्रस्त हो जाता है तो उसे वहां एक प्रविष्टि बनाना चाहिए। –

+0

@ मिहाइलस्टेंसकू नोप, '/ var/crash' खाली है। – shortspider

उत्तर

3

आप कोर डंप चाहते हैं, यह ओएस में बनाया गया है।

पहले ulimit -Sc unlimited उपयोगकर्ता के रूप में आप प्रक्रिया को चलाने के लिए चाहते हैं, इसलिए किसी भी आकार की कोर फ़ाइल बनाने की अनुमति दें। फिर kill -4 <pid>

यह कोर डंप उत्पन्न करना चाहिए। यह शायद निर्देशिका में होना चाहिए जहां प्रक्रिया से चलाया गया था।

यदि आप उपयोगकर्ता के रूप में लॉगिन नहीं कर सकते हैं तो एप्लिकेशन इसे चलाता है, आपको इसे limit.conf में रखना होगा।

+0

मैंने 'ulimit -Sc असीमित 'भाग लिया और फिर एक डॉटनेट प्रक्रिया शुरू की। 'Kill -4 ' चलाने के बाद मुझे डीएलएल स्थान में कोई कोर डंप फ़ाइल नहीं मिली या 'var/crash' – shortspider

+0

उपयोगकर्ता द्वारा लिखित'/var/crash' है? (इसमें चिपचिपा बिट सेट होना चाहिए लेकिन कुछ वितरण इसे अक्षम करते हैं।) – dond

+0

@ डोंड हाँ उपयोगकर्ता उपयोगकर्ता को 'var/crash' पर लिख सकता है – shortspider

3

लिनक्स coredumps की पीढ़ी को /proc/sys/kernel/core_pattern में परिभाषित किया गया है। यदि कुछ संकेत (उदा। SIGSEGV या SIGQUIT) प्रक्रिया को समाप्त करने का कारण बनते हैं, तो प्रक्रिया की स्मृति की एक छवि मूल रूप से उस फ़ाइल में लिखी जाती है। यदि यह पाइप-प्रतीक | से शुरू होता है, तो इसे किसी एप्लिकेशन में स्ट्रीम किया जा सकता है जो विश्लेषण को डंप करता है। यहां यह दस्तावेज़ीकरण किया गया है: http://man7.org/linux/man-pages/man5/core.5.html

आप इसे इस तरह कॉन्फ़िगर करते हैं: echo coredump > /proc/sys/kernel/core_pattern यह वर्तमान निर्देशिका में coredump नाम की एक फ़ाइल लिखेंगे।

आप इसे इस तरह कॉन्फ़िगर करते हैं: echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern यह (https://sigquit.wordpress.com/2009/03/13/the-core-pattern/ देखें)

/tmp/cores/core.bash.8539.drehbahn-mbp.1236975953 की तरह एक फ़ाइल पैदा करेगा दूसरों के रूप में सुझाव दिया, यह भी ulimit -S -c unlimited सेट किसी भी आकार के coredumps अनुमति देने के लिए। http://blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-dump-on-linux/

संबंधित मुद्दे