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

问题描述:

我试图使用--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 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

相关:可以gdb的消息“从终端输入不是”被抑制?](HTTP:// *.com/questions/23005668/can-gdbs-input-not-from-terminal-messages-be-suppressed) – TooTone 2015-07-16 11:08:02

在回答自己解释说,我想给的答案,有人给了我在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> 
+6

耶!今天我学到了一些关于GDB的新东西=) – Branan 2008-09-19 15:46:59

+0

已经保存了我的培根,尝试在Windows 7下使用MinGW进行调试,默认设置与Linux不同 - 很多谢谢 – bph 2012-05-16 09:22:20

例如,您需要在main中断,然后运行到该中断。所以共享库将被加载。

apache

没有符号。

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 

OT:在终端它看起来像这样调试卡哈在一条线:

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