【发布时间】:2016-11-03 18:14:45
【问题描述】:
我正在尝试修复其他人编写的代码中的错误,并且我正在尝试在 gdb 中逐步解决它以找出发生了什么。但是我打的其中一行是对 longjmp() 的调用,并且在该行上点击“next”之后,gdb 会继续常规执行,而不是在下一个正在执行的源代码行上中断。如果我在 longjmp() 行上尝试“step”,则会发生类似的继续。是否有任何 gdb 命令可以用来中断在 longjmp() 之后正在执行的下一个源代码行?
【问题讨论】:
-
您可以执行
break main,然后执行run并通过程序保持stepping。然后它会在每一行提示输入,包括 longjmp() 之后的那一行。 (如果这回答了你的问题,我会把它放在答案中) -
如果您在该行点击“step”而不是“next”会发生什么?您可以做的一件事是在处理来自
setjmp()的非零返回值的代码上添加一个断点。 -
@MDXF,需要明确的是,您是否要使用
step命令而不是next命令? OP说这对他不起作用。我看到您建议专门在main上打破,但我不明白为什么这会与在longjmp()之前的其他地方打破相比有所不同。