我正在尝试使用--command
标志自动执行gdb会话。我正在尝试在共享库(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”以在挂起的未来共享库加载时设置断点?
我记得我能够做点什么,但不记得是什么。
答案 0 :(得分:139)
回复自己,我想给出一个人在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>
答案 1 :(得分:9)
OT:在终端中,看起来像是在一行中调试Caja:
gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
答案 2 :(得分: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