كيفية تعيين نقاط التوقف في المكتبات المشتركة المستقبلية باستخدام علامة الأمر
سؤال
أحاول أتمتة جلسة gdb باستخدام --command
علَم.أحاول تعيين نقطة توقف على وظيفة في مكتبة مشتركة (ما يعادل Unix لـ DLL).يبدو cmds.gdb الخاص بي كما يلي:
set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r
ومع ذلك، أحصل على ما يلي:
shlomi:~/progs/bugs-external/kde/font-breaking$ gdb --command=cmds.gdb... GNU gdb 6.8-2mdv2009.0 (Mandriva Linux release 2009.0) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i586-mandriva-linux-gnu"... (no debugging symbols found) Function "IA__FcFontMatch" not defined. Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
لذلك لا يحدد نقطة التوقف بعد كل شيء.كيف يمكنني جعل الإجابة "y" افتراضيًا لتعيين نقاط توقف عند تحميل المكتبة المشتركة المعلقة في المستقبل؟
أتذكر أنني كنت قادرًا على القيام بشيء ما، لكن لا أستطيع تذكر ما هو.
المحلول
ردًا على نفسي، أود أن أعطي الإجابة التي قدمها لي أحد الأشخاص على IRC:
(gdb) apropos pending actions -- Specify the actions to be taken at a tracepoint set breakpoint -- Breakpoint specific settings set breakpoint pending -- Set debugger's behavior regarding pending breakpoints show breakpoint -- Breakpoint specific settings show breakpoint pending -- Show debugger's behavior regarding pending breakpoints
و حينئذ تعيين نقطة توقف معلقة على عمل الحيلة؛يتم استخدامه في cmds.gdb
مثل على سبيل المثال
set breakpoint pending on
break <source file name>:<line number>
نصائح أخرى
وقت إضافي:في الوحدة الطرفية، سيبدو الأمر هكذا لتصحيح أخطاء Caja في سطر واحد:
gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
بدون رموز.
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
لا تنتمي إلى StackOverflow