如何使用命令标志在将来的共享库上设置断点


92

我正在尝试使用该--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-breaking $ 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”。
使断点在将来共享库加载时挂起?(是或[n])[回答N;输入不是来自终端]

因此,它毕竟不会设置断点。如何将默认值设置为“ y”,以在未决的将来共享库加载时设置断点?

我记得自己有能力做些事情,但是却不记得自己做了什么。


Answers:


149

回覆我自己,我想提供某人在IRC上给我的答案:

(gdb)尚待处理
动作-指定要在跟踪点执行的动作
设置断点-断点特定设置
设置断点挂起-设置调试器关于挂起断点的行为
显示断点-断点特定设置
显示未决断点-显示调试器有关未决断点的行为

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

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

这节省了我的培根尝试使用MinGW在Windows 7下进行调试的默认设置,与Linux上的默认设置不同-非常感谢
bph

由于某种原因,我得到了这个错误Program received signal SIGILL, Illegal instruction。我正在从文件中获取断点,set breakpoint pending on因为某些断点位于程序加载的库中,所以我具有断点。如果我手动添加断点,则没有错误。还有其他人遇到类似的问题吗?
2016年

@brokenfoot:我认为您应该在一个新的顶级问题中提问,而不是在此处对答案进行评论。这样,更多的人会注意到它。此外,您应该提供有关系统的更多信息。
Shlomi Fish

11

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

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

2
您在哪里找到“ ex”开关?我在文档中找不到对该参数的任何引用(但它能起作用:))
Gearoid Murphy 2012年

-ex没有为我工作。我必须将命令放入一个tmp文件中,然后调用:gdb -x /tmp/gdb.commands myexecutible
Jason Moore

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.