如何使用 gdb 生成函数的所有回溯?
How to generate all backtraces of a function using gdb?
我有一个正在尝试检查的函数。我想找到这个函数的所有调用者,但是有几个问题:
- 我这样做是为了理解代码,因为它不是我写的,但我需要确切地知道它的行为方式
- 它事先通过 STL 运行,所以我不能只使用
callgrind
之类的东西来获得它的直接调用者
有 10 多个函数调用的堆栈跟踪,直到您到达导致调用此函数的 STL 中 而非 的实际代码。但是这些 STL 入口点各不相同,因为它是一个 compare
函数,对 is_equal
的调用与对 not_equal
的调用顺序不同,等等。我需要这样做至少有 10+ 不同的 功能,我想尽可能地简化它。
我想要一个工具,可以在每次调用函数时转储每个唯一的 完整 回溯。有人知道可以执行此操作的工具吗?
我在 Ubuntu 14.04.
上使用 gdb 和 c++
您可以让 gdb 在每次执行给定断点时执行一系列命令,例如,
break someFunction
commands
bt
continue
end
gdb scripting: execute commands at selected breakpoint, which has a link to the online documentation for gdb 5.1.7 Breakpoint Command Lists
中提到了该功能
我有一个正在尝试检查的函数。我想找到这个函数的所有调用者,但是有几个问题:
- 我这样做是为了理解代码,因为它不是我写的,但我需要确切地知道它的行为方式
- 它事先通过 STL 运行,所以我不能只使用
callgrind
之类的东西来获得它的直接调用者
有 10 多个函数调用的堆栈跟踪,直到您到达导致调用此函数的 STL 中 而非 的实际代码。但是这些 STL 入口点各不相同,因为它是一个 compare
函数,对 is_equal
的调用与对 not_equal
的调用顺序不同,等等。我需要这样做至少有 10+ 不同的 功能,我想尽可能地简化它。
我想要一个工具,可以在每次调用函数时转储每个唯一的 完整 回溯。有人知道可以执行此操作的工具吗?
我在 Ubuntu 14.04.
上使用 gdb 和 c++您可以让 gdb 在每次执行给定断点时执行一系列命令,例如,
break someFunction
commands
bt
continue
end
gdb scripting: execute commands at selected breakpoint, which has a link to the online documentation for gdb 5.1.7 Breakpoint Command Lists
中提到了该功能