एक समानताएं साझा किए गए फ़ोल्डर पर उबंटू पर कोई कोर डंप नहीं


5

मेरे पास एक एप्लिकेशन है जिस पर मैं काम कर रहा हूं, और जब मैं इसे सेगफुल करता हूं तो मुझे एक कोर डंप होने में परेशानी हो रही है। वास्तव में, मुझे असली कोर डंप फ़ाइलों को प्राप्त करने में परेशानी हो रही है। एक साधारण परीक्षण का मामला एक कोर डंप फ़ाइल उत्पन्न करेगा, लेकिन यह शून्य लंबाई है।

मैं ulimit -c unlimitedसेट हो गया हूं । यह 64-बिट उबंटू मेवरिक है। कोई संकेत कि आगे क्या करना है?

[dlee@dlee-oak t]$ ulimit -c
unlimited

[dlee@dlee-oak t]$ cat mkcore.cpp
int main() { *((int *)0) = 0; }

[dlee@dlee-oak t]$ g++ -g mkcore.cpp -o mkcore

[dlee@dlee-oak t]$ ./mkcore 
Segmentation fault

[dlee@dlee-oak t]$ ls -l core*
-rw-r--r-- 1 dlee dlee 0 2010-12-21 15:00 core.2993

संपादित करें: अधिक जानकारी

[dlee@dlee-oak t]$ tail -n +1 /proc/sys/kernel/core_*
==> /proc/sys/kernel/core_pattern <==
core

==> /proc/sys/kernel/core_pipe_limit <==
0

==> /proc/sys/kernel/core_uses_pid <==
1

[dlee@dlee-oak t]$ tail /var/log/kern.log
<snip/>
Dec 21 16:07:40 dlee-oak kernel: [  133.863045] mkcore[1589]: segfault at 0 ip 000000000040043d sp 00007fffbd025510 error 6 in mkcore[400000+aa000]

मैंने अभी महसूस किया है कि जिस फाइल सिस्टम पर कोर फाइल जेनरेट की जा रही है वह एक समानताएं साझा फ़ोल्डर है । (यह उबंटू उदाहरण मेरे मैक पर एक समानताएं वीएम पर चल रहा है)। जब मैं स्थानीय डिस्क पर एक निर्देशिका से ऐप को चलाता हूं, तो कोर फ़ाइल अपेक्षित रूप से उत्पन्न होती है।

इसलिए मैं इस सवाल को थोड़ा बदल दूंगा: यह prl_fs फाइल सिस्टम पर कोर फाइल क्यों नहीं बना रहा है? बस उत्सुक...

# 2 संपादित करें:

आप ध्यान दें कि जब यह शून्य लंबाई की कोर फ़ाइल बनाता है, तो यह प्रिंट नहीं होती है (core dumped)। मैंने अपनी पवित्रता की दोहरी जांच की, और हाँ शून्य लंबाई कोर फ़ाइल वास्तव में बनाई जा रही है।

[dlee@dlee-oak t]$ X=$(pwd)
[dlee@dlee-oak t]$ ls -l core*
ls: cannot access core*: No such file or directory
[dlee@dlee-oak t]$ ./mkcore 
Segmentation fault
[dlee@dlee-oak t]$ ls -l core*
-rw-r--r-- 1 dlee dlee 0 2010-12-22 00:41 core.6009

[dlee@dlee-oak t]$ cd ~
[dlee@dlee-oak ~]$ $X/mkcore
Segmentation fault (core dumped)

का आउटपुट क्या है tail -n +1 /proc/sys/kernel/core_*(कोर डंप से संबंधित विभिन्न वैश्विक कर्नेल पैरामीटर दिखाता है)? क्या इसमें कोई संबंधित आउटपुट है /var/log/kern.log?
गिल्स

ठीक है, यह एक अति विशिष्ट मुद्दा है। यदि आप कोर फ़ाइल बनाते हैं और उसमें कुछ सामग्री डालते हैं, तो क्या यह छोटा है? (या तो core_uses_pid0 पर सेट करें या चलाएं sh -c 'echo foo >core.$$; exec ./mkcore'।)
गिल्स

सच यह है कि lxr.linux.no/linux+v2.6.36/fs/exec.c#L1963 , अगर किसी को भी इसकी व्याख्या करने की परवाह है ...
Gilles

गिलेस: एक मौजूदा कोर फ़ाइल को छोटा नहीं किया गया है।
leedm777

स्रोत के मेरे पढ़ने से , एक मुख्य फ़ाइल जो बनाई गई है, लेकिन छंटनी नहीं हो सकती है इसका मतलब हो सकता है: फ़ाइल में एक लिंक गिनती ≥2 (नहीं) है; कुछ अजीब कैशिंग व्यवहार जैसे कि d_unhashedयह सच है (?); फ़ाइल एक नियमित फ़ाइल नहीं है (नहीं); फ़ाइल आपके स्वामित्व में नहीं है (नहीं); आप फ़ाइल को नहीं लिख सकते (नहीं)। क्या समानताएं उपकरण के कर्नेल भाग का स्रोत उपलब्ध है?
गिल्स

जवाबों:


1

मैं स्पष्ट रूप से अंतर्निहित कारण का पता नहीं लगा सका, लेकिन शून्य लंबाई की कोर फ़ाइल एक समानताएं फ़ोल्डर फ़ोल्डर पर कोर फ़ाइल बनाने की कोशिश करने के कारण हुई थी ।

मैंने स्थानीय निर्देशिका से एप्लिकेशन चलाकर समस्या का हल किया। मुझे लगता है कि एक और विकल्प /proc/sys/kernel/core_patternएक स्थानीय निर्देशिका में कोर फ़ाइलों को डंप करने के लिए सेट किया जाएगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.