debugging - GDB 可以在一系列函数调用上设置断点吗?

标签 debugging gdb breakpoints gdb-python

我想在崩溃发生之前检查一些全局变量。该问题仅在某个堆栈跟踪上重现,并且在最内层函数(或堆栈中的任何其他函数)上设置断点不会让我足够接近。

只有当堆栈的顶部包含这样的东西时,我才能达到破坏的结果吗?

#0 __GI_connect
#1 curl_connect
#2 get_file
#3 init_assets

只是在做
b init_assets
c
b get_file
c
...

不起作用,因为多次调用 init_assets 并且它不会每次都调用 curl,因此 gdb 会中断使用 curl 的无关代码。

后来编辑:另一种方式是:
b inner_func
ignore 1 10000
r
# app crashes
info b

Breakpoint 1 has been hit 10 times.

然后您删除断点,重新添加它并且只忽略 9 次。当您再次运行该应用程序时,gdb 将在第 10 次停止——当 inner_func 崩溃时。

如果执行变化太大,您还可以在 mozilla 的 rr 中记录应用程序。

最佳答案

您可以将条件断点与 $_caller_is convenience function 一起使用。像这样的东西:

(gdb) break connect
Breakpoint 1 at 0x7ffff7ee6820
(gdb) cond 1 $_caller_is("curl_connect") && $_caller_is("get_file", 2) && $_caller_is("init_assets", 3)

关于debugging - GDB 可以在一系列函数调用上设置断点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55356858/

相关文章:

java - 如何从 Sublime Text 编辑器调试 Java 应用程序

linux - 没有相关信息的 GDB 调试跟踪(#0 0x2e6e6f69 in ?? ())

linux - 从交叉编译 linux 目标分析故障转储

javascript - 如何识别变量的对象类型?

linux - gcc 4.8.2 没有可识别的调试信息

linux - gdb是否临时给页面写权限?

visual-studio - 如何在 Visual Studio 中获取变量写入的断点?

c# - 禁用/删除子断点?

c++ - 仅针对未捕获的 C++ 异常的 gdb 捕获点?

java - 方法断点可能会大大减慢调试速度