101

我正在尝试使用该--command标志自动化 gdb 会话。我正在尝试在共享库(DLL 的 Unix 等效项)中的函数上设置断点。我的 cmds.gdb 看起来像这样:

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

但是,我得到以下信息:

shlomi:~/progs/bugs-external/kde/font-break$ gdb --command=cmds.gdb...
GNU gdb 6.8-2mdv2009.0(Mandriva Linux 版本 2009.0)
版权所有 (C) 2008 Free Software Foundation, Inc.
许可 GPLv3+:GNU GPL 版本 3 或更高版本
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。输入“显示复制”
和“显示保修”了解详情。
此 GDB 配置为“i586-mandriva-linux-gnu”...
(未找到调试符号)
未定义函数“IA__FcFontMatch”。
在未来的共享库加载时使断点挂起?(y or [n]) [回答 N; 输入不是来自终端]

所以它毕竟没有设置断点。如何使其默认回答“y”以在未决的未来共享库加载上设置断点?

我记得我能够做某事,但不记得是什么。

4

3 回答 3

166

回复我自己,我想给出IRC上有人给我的答案:

(gdb) 待定
actions -- 指定要在跟踪点执行的操作
设置断点 -- 断点特定设置
设置断点挂起——设置调试器关于挂起断点的行为
显示断点 -- 断点特定设置
show breakpoint pending -- 显示调试器关于挂起断点的行为

所以设置断点挂起就可以了;它用于cmds.gdb例如

set breakpoint pending on
break <source file name>:<line number>
于 2008-09-19T08:32:20.933 回答
13

OT:在终端中,在一行中调试 Caja 看起来像这样:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
于 2012-07-19T20:41:09.263 回答
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
于 2009-07-14T02:57:10.383 回答