GDB:使用包含前一帧变量的条件设置复杂断点

GDB:使用包含前一帧变量的条件设置复杂断点,gdb,Gdb,是否可以设置一个复杂断点,该断点的条件包括检查传递给外部函数(框架)的参数 例如 这里我想在sample.cpp:356上设置一个断点,它在函数进程框架#3中处于打开状态, 如果命中断点时的_进程或帧#1的sn==31824 实际上断点在函数过程中,但我想暂停函数过程中的执行 提前感谢我不知道是否可以创建引用外部帧的条件断点,但您可以使用断点命令来实现类似的结果 下面是一个示例gdb会话: (gdb) break some-location (gdb) commands Type command

是否可以设置一个复杂断点,该断点的条件包括检查传递给外部函数(框架)的参数

例如

这里我想在sample.cpp:356上设置一个断点,它在函数进程框架#3中处于打开状态, 如果命中断点时的_进程或帧#1的sn==31824

实际上断点在函数过程中,但我想暂停函数过程中的执行


提前感谢

我不知道是否可以创建引用外部帧的条件断点,但您可以使用断点命令来实现类似的结果

下面是一个示例gdb会话:

(gdb) break some-location
(gdb) commands
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>silent
>up
>if (sn != 31824)
 >continue
 >end
>end
现在,每当
gdb
点击断点时,它将自动向上移动一帧,检查
sn
,如果值不正确,则继续。这不会比条件断点慢任何(或太多),唯一真正的缺点是每次遇到断点时它都会打印一行,即使gdb随后继续


命令列表中的
silent
会减少在遇到断点时产生的一些正常输出,可以将其删除以获得更详细的体验。

此解决方案工作正常,但遇到了
next
问题——如果您试图
next
越过此断点,并决定继续,然后,您的
下一步
将不会停止,而是程序将自由运行。通过在Python中编写更多脚本,您可以解决这个问题,并使条件依赖于其他地方的变量。
(gdb) break some-location
(gdb) commands
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>silent
>up
>if (sn != 31824)
 >continue
 >end
>end