中的任何函数时,我想知道在使用某个文件中的函数时是否有任何方法来停止程序。理想的情况是什么,我期待的是一样的东西:使用gdb停止程序,当它使用文件X
GDB Stop when use a function from file foo.cpp
之所以这样做是因为我调试的代码,是不是我的,我不知道到底是什么功能都被称为什么功能都没有。在GDB中是否有一个函数来执行我正在寻找的任务,或者是否有其他建议的方法来执行类似的操作?
感谢
中的任何函数时,我想知道在使用某个文件中的函数时是否有任何方法来停止程序。理想的情况是什么,我期待的是一样的东西:使用gdb停止程序,当它使用文件X
GDB Stop when use a function from file foo.cpp
之所以这样做是因为我调试的代码,是不是我的,我不知道到底是什么功能都被称为什么功能都没有。在GDB中是否有一个函数来执行我正在寻找的任务,或者是否有其他建议的方法来执行类似的操作?
感谢
步骤1:构建的,我能想到的foo.cpp
最简单的方法定义的所有功能的列表(假设你有binutils
和GNU grep
):
nm a.out | grep ' T ' | addr2line -fe a.out |
grep -B1 'foo\.cpp' | grep -v 'foo\.cpp' > funclist
第2步:建立一个GDB脚本将设置中断点上的每个上述功能:
sed 's/^/break /' funclist > stop-in-foo.gdb
[显然,步骤1和2可以被组合; - ]
3步:实际设置断点:
gdb a.out
(gdb) source stop-in-foo.gdb
看着this答案,一个更简单的(如果你在Fedora Linux系统)的方式,找出Foo.cpp中函数的调用其中:
ftrace -sym='foo.cpp#*' ./a.out
太坏ftrace手册页说这还没有实现。
我打算说这样做,但实际上是+1。 =) – 2009-01-25 19:03:11
似乎没有拿起静态函数。 – 2012-08-13 11:11:42
可以使用命令。该命令在所有匹配项上设置无条件断点,并打印它设置的所有断点列表。一旦设置了这些断点,就会像使用break命令设置的断点一样对待它们。您可以删除它们,禁用它们,或者使其条件与其他任何断点相同。
正则表达式的语法是与`grep'这样的工具一起使用的标准语法。请注意,这与shell所使用的语法不同,因此,例如,foo *会匹配所有包含fo,后跟零个或多个os的函数。有一个隐含的。*前导和尾随你提供的正则表达式,所以只匹配以foo开头的函数,请使用^ foo。
在调试C++程序时,rbreak对于在不是任何特殊类的成员的重载函数上设置断点很有用。
这只会打破一个功能,但问题在于所有功能。 – Herbert 2017-01-12 22:12:46
rbreak regex
设置断点:
rbreak foo.cpp:.
这里.
匹配任何东西,并在文件foo.cpp
的所有功能,所以休息。
请接受:http://stackoverflow.com/a/478145/895245,它完全符合您当前GDB的需求。 – 2015-07-18 07:45:02