कमांड फ्लैग के साथ भविष्य के साझा पुस्तकालयों पर ब्रेकप्वाइंट कैसे सेट करें


92

मैं --commandध्वज का उपयोग करके एक gdb सत्र को स्वचालित करने का प्रयास कर रहा हूं । मैं एक साझा लाइब्रेरी (एक DLL के बराबर यूनिक्स) में एक फ़ंक्शन पर एक ब्रेकपॉइंट सेट करने का प्रयास कर रहा हूं। मेरा cmds.gdb इस तरह दिखता है:

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

हालाँकि, मुझे निम्नलिखित मिल रहा है:

श्लोमी: ~ / प्रोज्स / बग्स-एक्सटर्नल / केडी / फॉन्ट-ब्रेकिंग $ gdb --command = cmds.gbb ...
GNU gdb 6.8-2mdv2009.0 (मैंड्रिवा लिनक्स रिलीज़ 2009.0)
कॉपीराइट (C) 2008 फ्री सॉफ्टवेयर फाउंडेशन, इंक।
लाइसेंस GPLv3 +: GNU GPL संस्करण 3 या बाद का संस्करण 
यह मुफ्त सॉफ्टवेयर है: आप इसे बदलने और पुनर्वितरित करने के लिए स्वतंत्र हैं।
कानून द्वारा अनुमत सीमा तक कोई वारंटी नहीं है। टाइप करें "शो कॉपी"
और विवरण के लिए "शो वारंटी"।
इस GDB को "i586-mandriva-linux-gnu" के रूप में कॉन्फ़िगर किया गया था ...
(कोई डिबगिंग प्रतीक नहीं मिला)
फ़ंक्शन "IA__FcFontMatch" परिभाषित नहीं है।
भविष्य के साझा पुस्तकालय लोड पर विराम बिंदु लंबित करें? (y या [एन]) [उत्तर एन; इनपुट टर्मिनल से नहीं]

तो यह सब के बाद ब्रेकपॉइंट सेट नहीं करता है। लंबित भविष्य के साझा लाइब्रेरी लोड पर ब्रेकप्वाइंट सेट करने के लिए "वाई" का उत्तर देने के लिए मैं इसे कैसे डिफ़ॉल्ट बना सकता हूं?

मुझे याद है कि मैं कुछ करने में सक्षम था, लेकिन क्या याद नहीं कर सकता।


जवाबों:


149

अपने आप को जवाब देना, मैं जवाब देना चाहूंगा कि किसी ने मुझे आईआरसी पर दिया था:

(gdb) एप्रोपोस पेंडिंग है
क्रियाएँ - ट्रेसपॉइंट पर ली जाने वाली क्रियाओं को निर्दिष्ट करें
ब्रेकपॉइंट सेट करें - ब्रेकप्वाइंट विशिष्ट सेटिंग्स
सेट ब्रेकपॉइंट लंबित - लंबित ब्रेकपॉइंट के बारे में डीबगर का व्यवहार सेट करें
ब्रेकपॉइंट दिखाएँ - ब्रेकप्वाइंट विशिष्ट सेटिंग्स
विराम बिंदु लंबित दिखाएं - लंबित विराम बिंदु के संबंध में डिबगर का व्यवहार दिखाएं

और इसलिए सेट ब्रेकपॉइंट लंबित है जो चाल है; इसका उपयोग cmds.gdbउदाहरण के लिए किया जाता है

set breakpoint pending on
break <source file name>:<line number>

विंडोज 7 के तहत डिबग करने की कोशिश करने वाले मेरे बेकन को
मिनगडब्ल्यू के

किसी कारण से, मुझे यह त्रुटि मिलती है Program received signal SIGILL, Illegal instruction। मैं एक फ़ाइल से ब्रेकपॉइंट्स को सोर्स कर रहा हूं और मेरे पास set breakpoint pending onकुछ ब्रेकपॉइंट्स लाइब्रेरी में हैं, जो प्रोग्राम लोड करता है। यदि मैं मैन्युअल रूप से ब्रेकप्वाइंट जोड़ता हूं, तो कोई त्रुटि नहीं है। किसी और को भी इसी तरह की समस्या का सामना करना पड़ रहा है?
टूटा हुआ

@brokenfoot: मुझे लगता है कि आपको यहां एक जवाब के लिए एक टिप्पणी के बजाय एक नए शीर्ष-स्तरीय प्रश्न में अपना प्रश्न पूछना चाहिए। इस तरह से अधिक लोग इसे नोटिस करेंगे। इसके अलावा, आपको अपने सिस्टम के बारे में अधिक जानकारी प्रदान करनी चाहिए।
श्लोमी फिश

11

OT: टर्मिनल में यह एक पंक्ति में काजा को डिबग करने के लिए इस तरह दिखेगा:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync

2
आपको 'पूर्व' स्विच कहां मिला ?, मैं प्रलेखन में इस पैरामीटर का कोई संदर्भ नहीं पा सकता हूं (लेकिन यह काम करता है :))
गेयॉइड मर्फी

-exमेरे लिए काम नहीं किया। मुझे कमांड को एक tmp फाइल में डालना था और उसके साथ कॉल करना था:gdb -x /tmp/gdb.commands myexecutible
जेसन मूर

5

बिना किसी चिन्ह के।

objdump -t /lib/libacl.so
SYMBOL TABLE:
no symbols
objdump -T /lib/libacl.so
...
00002bd0 g    DF .text  000000d0  ACL_1.0     acl_delete_entry
...


(gdb) break 0x0002bd0 

(gdb) x/20i acl_delete_entry
0x2bd0 <acl_delete_entry>:      stwu    r1,-32(r1)
0x2bd4 <acl_delete_entry+4>:    mflr    r0
0x2bd8 <acl_delete_entry+8>:    stw     r29,20(r1)
0x2bdc <acl_delete_entry+12>:   stw     r30,24(r1)
0x2be0 <acl_delete_entry+16>:   mr      r29,r4
0x2be4 <acl_delete_entry+20>:   li      r4,28972
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.