2

我在一个循环中发生了一个 SIGFPE。如果我设置断点或使用 stop、nopass 等处理 SIGFPE,我会在此行之后丢失帧变量。在断点的情况下,我需要首先通过执行来到达那里n N,其中N是一个很大的数字,以便循环在断点上运行,直到出现发出 SIGFPE 的此类变量值。通过处理或断点执行后,我失去了框架变量,因此我无法反向搜索并进一步调试程序(变量脱离上下文)。

如何快速处理循环内的 SIGFPE?

谢谢!

新信息:是否可以停止具有逻辑观察点的程序?我进入了负责的框架,发现有问题的变量达到了 350 的值(它应该小于零)。为什么不

watch x0 > 100

此时停止执行?

4

1 回答 1

3

你用watch错了。

http://www.ofb.net/gnu/gdb/gdb_30.html#SEC30

watch expr

为表达式设置观察点。当程序写入 expr 并且它的值发生变化时,GDB 将中断。

所以,你不能看 a x0>100,但可以看 a x0,或者array[59]( watch 的参数是内存中的地址)

对于您的任务,您可以使用条件中断。http://www.ofb.net/gnu/gdb/gdb_29.html#SEC29

break ... if cond

使用条件 cond 设置断点;每次到达断点时计算表达式 cond,并且仅当值非零时才停止 - 也就是说,如果 cond 计算结果为真。`...' 代表上述可能的参数之一(或无参数),指定中断的位置。有关断点条件的更多信息,请参阅断点条件部分。

所以

break main.c:345 if x0>100
于 2011-07-05T14:33:01.903 回答