我在循环中发生了SIGFPE。如果我设置断点或使用stop,nopass等处理SIGFPE,我会在此行之后松开帧变量。在断点的情况下,我需要先执行n N
,其中N
是一个大数字,以便循环遍历断点,直到这些变量值出现SIGFPE为发行。在通过处理或断点执行之后,我松开了帧变量,因此我无法反向搜索并进一步调试程序(变量脱离上下文)。
如何快速处理循环中的SIGFPE?
谢谢!
新信息:是否可以使用逻辑监视点停止程序?我已进入负责任的框架,发现有问题的变量达到350的值(它应该小于零)。为什么不
watch x0 > 100
此时停止执行?
答案 0 :(得分:3)
您以错误的方式使用watch
。
http://www.ofb.net/gnu/gdb/gdb_30.html#SEC30
watch expr
为表达式设置观察点。当程序写入expr并且其值发生变化时,GDB将中断。
因此,您无法观看x0>100
,但可以观看x0
或array[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