gdb:循环中的SIGFPE

时间:2011-07-05 14:13:51

标签: loops gdb sigfpe

我在循环中发生了SIGFPE。如果我设置断点或使用stop,nopass等处理SIGFPE,我会在此行之后松开帧变量。在断点的情况下,我需要先执行n N,其中N是一个大数字,以便循环遍历断点,直到这些变量值出现SIGFPE为发行。在通过处理或断点执行之后,我松开了帧变量,因此我无法反向搜索并进一步调试程序(变量脱离上下文)。

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

谢谢!

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

watch x0 > 100

此时停止执行?

1 个答案:

答案 0 :(得分:3)

您以错误的方式使用watch

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

watch expr

  

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

因此,您无法观看x0>100,但可以观看x0array[59](观看的参数是内存中的地址)

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

break ... if cond

  

设置条件为cond的断点;每次到达断点时计算表达式cond,并且仅在值为非零时停止 - 即,如果cond计算为true。 `...'代表上面描述的一个可能的参数(或没有参数),指定中断的位置。有关断点条件的详细信息,请参见断点条件一节。

所以

break main.c:345 if x0>100