में निष्पादित प्रत्येक असेंबली निर्देश प्रदर्शित करना मेरे पास वर्तमान में एक मुश्किल बग है जो उस स्थान पर होती है जहां मेरे पास स्रोत या प्रतीकों तक पहुंच नहीं है, यानी मैं निर्देश और उसका पता देख सकता हूं जहां दुर्घटना होती है, लेकिन यह लगभग यह। मैं क्या करना चाहता हूं gdb
बिना किसी बातचीत की आवश्यकता के चलाएगा और प्रत्येक निर्देश को प्रदर्शित करेगा क्योंकि यह है, लेकिन मुझे अभी तक ऐसा करने का कोई तरीका नहीं मिला है।gdb
क्या मैं प्राप्त करने के लिए आशा करती हूं कि कुछ इस तरह है:
(gdb) /* some command */
0x2818a7c0: push %ebp
0x2818a7c1: mov %esp,%ebp
0x2818a7c3: push %ebx
0x2818a7c4: sub $0x4,%esp
...
0x28563622: mov %esi,0x0(%eax)
Program received signal SIGSEGV, Segmentation fault.
क्या मैं कर रहा हूँ, प्रोग्राम काउंटर के लिए एक प्रदर्शन की स्थापना इसलिए की तरह है:
(gdb) display/i $pc
और तो stepi
साथ कोड के माध्यम से चल:
(gdb) stepi
1: x/i $pc 0x2818a7c0: push %ebp
हालांकि, दुर्घटना सैकड़ों या टी है निर्देशों के हजारों दूर, और मैं कई बार एक बार "प्रवेश" करने के बिना, प्रत्येक को एक साथ (एक साथ, अगर बेहतर) देखने का एक तरीका चाहूंगा। इसके अलावा, अगर मैं इसे मैन्युअल रूप से करना चाहता था, तो मुझे प्रत्येक निर्देश के बीच (gdb)
प्रॉम्प्ट दिखाई देगा, जो वांछनीय से कम है।
एक मार्ग मैं संक्षिप्त देखा है scripting है, लेकिन मेरे ही सोचा, main()
पर सेटअप करने के लिए है यह प्रदर्शित करते हैं और एक अन्य को तोड़ने (अगले निर्देश के लिए), और फिर जारी रखने के लिए, लेकिन फिर मैं commands
उपयोग नहीं कर सकते commands
ब्लॉक के भीतर, इसलिए यह जिस तरह से मैं कल्पना कर रहा हूं, वह काम नहीं करेगा।
यदि यह महत्वपूर्ण है, तो मैं फ्रीबीएसडी पर काम कर रहा हूं।
मैंने अपना प्रश्न यह अद्यतन करने के लिए अद्यतन किया है कि मैं वर्तमान में फ्रीबीएसडी पर काम कर रहा हूं, जिसका मेरा मानना है कि नियम # 2 है? –
आह हाँ, वर्तमान में आईडीए डीबीगिंग फ्रीबीएसडी बाइनरी का समर्थन नहीं करता है। हालांकि, आप अभी भी इसे डिस्सेबलर (विंडोज/वाइन या फ्रीबीएसडी पर लिनक्स सपोर्ट का उपयोग करके) के रूप में उपयोग कर सकते हैं - यह मृत सूची को देखने से कहीं ज्यादा बेहतर है। –