दिलचस्प पोस्ट
क्या पीसी के माध्यम से iTunes का उपयोग किए बिना यूडीआईडी ​​प्राप्त करने के लिए आईओएस (आईओएस 7 रिलीज) के बाद कोई रास्ता है? वसंत और सीतनिद्रा में होना का उपयोग करके कई डेटाबेस में वितरित लेनदेन करने का 'सर्वोत्तम' तरीका क्या है सबसे तेज़ संभव grep सीतनिद्रा में होना 4 और वसंत में विभिन्न प्रकार के रिश्तों को परिभाषित करने के लिए मैं एनोटेशन का उपयोग कैसे करूं? सी ++ कन्स प्रयोग स्पष्टीकरण किसी विशिष्ट आईपी रेंज में इनपुट आईपी की जांच कैसे करें रोकें jQuery। कैश होने से प्रतिक्रिया क्या फ़ायरफ़ॉक्स में execCommand SaveAs काम करता है? गोलाकार कोनों के साथ एंड्रॉइड में एक दृश्य कैसे बनाएं एसक्यूएल दो तालिका में शामिल हो काम करने के लिए "मार्जिन: 0 ऑटो;" के लिए, वास्तव में क्या आवश्यक है? यदि (ऑब्जेक्ट में कुंजी) या यदि (object.hasOwnProperty (कुंजी) Tensorflow: कैसे एक मॉडल को बचाने / बहाल करने के लिए? जब तक यह पूरी तरह तैयार नहीं होता है तब तक खिड़की को प्रदर्शित करने से रोकना? $ पर Jquery चयनकर्ताओं का उपयोग करें .एक्सएक्स एचटीएमएल लोड हो गया है?

जीडीबी के साथ प्रोग्राम के मुख्य डंप फ़ाइल का विश्लेषण कैसे करें?

मेरा कार्यक्रम इस तरह कार्य करता है:

exe -p param1 -i param2 -o param3 

यह कोर डंप फ़ाइल core.pid दुर्घटनाग्रस्त हो गया और उत्पन्न

मैं कोर डंप फ़ाइल का विश्लेषण करना चाहता हूं

 gdb ./exe -p param1 -i param2 -o param3 core.pid 

लेकिन जीडीबी जीडीबी के इनपुट के रूप में एक्सई के पैरामीटर को पहचानते हैं।

इस स्थिति में कोर डंप फ़ाइल का विश्लेषण कैसे करें?

वेब के समाधान से एकत्रित समाधान "जीडीबी के साथ प्रोग्राम के मुख्य डंप फ़ाइल का विश्लेषण कैसे करें?"

आप कई तरीकों से जीडीबी के साथ मूल का उपयोग कर सकते हैं, लेकिन पैरामीटर को पारित करना जो कि जीडीबी के निष्पादन योग्य को पारित करना है कोर फ़ाइल का उपयोग करने का तरीका नहीं है। यह भी कारण हो सकता है कि आपको त्रुटि मिलती है आप कोर फाइल को निम्नलिखित तरीकों से उपयोग कर सकते हैं:
gdb <executable> <core-file> या gdb <executable> -c <core-file> या

 gdb <executable> ... (gdb) core <core-file> 

कोर फ़ाइल का उपयोग करते समय आपको तर्कों को पारित नहीं करना पड़ता है। क्रैश परिदृश्य जीडीबी में दिखाया गया है (उदारीकरण पर जीडीबी संस्करण 7.1 के साथ जाँच) उदाहरण के लिए:

 $ ./crash -p param1 -o param2 Segmentation fault (core dumped) $ gdb ./crash core GNU gdb (GDB) 7.1-ubuntu ... Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario Program terminated with signal 11, Segmentation fault. #0 __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99 99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory. in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S (gdb) 

यदि आप एक्जीक्यूटेबल में पैरामीटर पारित करना चाहते हैं तो जीडीबी उपयोग में डीबग किया जाना --args
उदाहरण के लिए:

 $ gdb --args ./crash -p param1 -o param2 GNU gdb (GDB) 7.1-ubuntu ... (gdb) r Starting program: /home/@@@@/crash -p param1 -o param2 Program received signal SIGSEGV, Segmentation fault. __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99 99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory. in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S (gdb) 

मैन पेज अन्य जीडीबी विकल्पों को देखने के लिए सहायक होंगे।

बस पैरामीटर को छोड़ दें, जीडीबी की उन्हें आवश्यकता नहीं है:

 gdb ./exe core.pid 

सीडीयूडीप फ़ाइलों को डिबग करने के लिए जीडीबी का सरल उपयोग:

 gdb <executable_path> <coredump_file_path> 

"प्रक्रिया" के लिए Coredump फ़ाइल को "कोर। पीआईडी" फ़ाइल के रूप में बनाया जाता है। जीडीबी-प्रॉम्प्ट में आने के बाद, (ऊपर दिए गए कमांड के निष्पादन पर), टाइप करें;

 ... (gdb) where 

यह आपको स्टैक की जानकारी के साथ मिल जाएगा, जहां आप दुर्घटना / गलती के कारणों का सामना कर सकते हैं। दूसरे आदेश, एक ही उद्देश्य के लिए है;

 ... (gdb) bt full 

यह ऊपर के समान है सम्मेलन से, यह पूरे स्टैक की जानकारी देता है (जो अंततः क्रैश स्थान की ओर जाता है)।

आरएमएस के जीडीबी डीबगर ट्यूटोरियल से :

 prompt > myprogram Segmentation fault (core dumped) prompt > gdb myprogram ... (gdb) core core.pid ... 

सुनिश्चित करें कि आपकी फ़ाइल वास्तव में एक core छवि है – file का उपयोग करके उसे जांचें

थोड़ा अलग दृष्टिकोण आपको पूरी तरह से GDB को छोड़ने की अनुमति देगा। यदि आप चाहते हैं कि सभी एक बैकस्ट्रैक्ट हैं, तो linux-विशिष्ट उपयोगिता 'catchsegv' SIGSEGV को पकड़कर एक बैकस्ट्रैस प्रदर्शित करेगा।

यह निष्पादन योग्य कोई फर्क नहीं पड़ता है तर्क है या नहीं, एक जनरेटेड कोर फ़ाइल के साथ किसी भी बाइनरी पर जीडीबी चलाने के लिए सिंटैक्स नीचे है

 Syntax: gdb <binary name> <generated core file> Eg: gdb l3_entity 6290-corefile 

मुझे अधिक समझने के लिए नीचे दिए गए उदाहरण के लिए।

 bash-4.1$**gdb l3_entity 6290-corefile** **Core was generated** by `/dir1/dir2/dir3/l3_entity **Program terminated with signal SIGABRT, Aborted.** #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 (gdb) 

उपरोक्त आउटपुट से, आप कोर के बारे में अनुमान लगा सकते हैं कि क्या यह एक नाल पहुंच या SIGABORT आदि है।

ये नंबर # 0 से # 10 जीडीबी के स्टैक फ़्रेम हैं ये स्टैक फ़्रेम आपके बाइनरी के नहीं हैं ऊपर 0 से 10 फ्रेम में यदि आपको संदेह है कि कुछ गलत है तो उस फ्रेम का चयन करें

 (gdb) frame 8 

अब इसके बारे में अधिक जानकारी देखने के लिए:

 (gdb) list + 

आगे की समस्या की जांच करने के लिए आप यहां इस समय संदिग्ध चर के मूल्यों को प्रिंट कर सकते हैं।

 (gdb) print thread_name 

आप मूल डंप फ़ाइल "gdb" कमांड का उपयोग करके विश्लेषण कर सकते हैं।

  gdb - The GNU Debugger syntax: # gdb executable-file core-file ex: # gdb out.txt core.xxx 

धन्यवाद।

बस कमांड $ gdb टाइप करें

या $ gdb

$ gdb) कोर

किसी भी कमांड लाइन वाद विवाद को प्रदान करने की आवश्यकता नहीं है। पहले अभ्यास के कारण उत्पन्न कोड डंप