gdb:循环内的 SIGFPE
我在循环内发生了 SIGFPE。如果我设置断点或使用 stop、nopass 等处理 SIGFPE,我会在此行之后丢失帧变量。在断点的情况下,我需要首先通过执行n N
到达那里,其中N
是一个很大的数字,以便循环运行在断点上,直到这样发出 SIGFPE 时会出现变量值。通过处理或断点执行后,我丢失了框架变量,因此我无法反向搜索并进一步调试程序(变量脱离上下文)。
如何快速处理循环内的 SIGFPE?
谢谢!
新信息:是否可以通过逻辑观察点停止程序?我已经进入责任框架,发现相关变量的值为 350(它应该远小于零)。 不停止执行呢?
watch x0 > 100
为什么此时
I have a SIGFPE happening within a loop. If I set a breakpoint or handle the SIGFPE with stop, nopass, etc, i loose the frame variables after this line. In the case of a breakpoint, I need to first get there by executing n N
, where N
is a large number, so that the loop runs over the breakpoint within until such variable values occure that the SIGFPE is issued. After the execution by handling or breakpoint, I loose the frame variables, so I cannot reverse-search and further debug the program (variable out of context).
How do I handle a SIGFPE within a loop in a fast way?
Thanks!
New information: is it possible to stop a program with a logical watch point? I have gone into the responsible frame, and found that the variable in question attains a value of 350 (it should be way less than zero). Why doesn't
watch x0 > 100
stop the execution at this point?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您以错误的方式使用
watch
。http://www.ofb.net/gnu/gdb/gdb_30.html#SEC30
观察表达式
因此,您无法监视
x0>100
,但可以监视x0
或array[59]
(监视的参数是地址在内存中)对于您的任务,您可以使用条件中断。 http://www.ofb.net/gnu/gdb/gdb_29.html#SEC29
中断...如果条件
所以
You use
watch
in wrong way.http://www.ofb.net/gnu/gdb/gdb_30.html#SEC30
watch expr
So, you can't watch a
x0>100
, but can watch ax0
, orarray[59]
(argument of watch is address in memory)For your task you can use conditional break. http://www.ofb.net/gnu/gdb/gdb_29.html#SEC29
break ... if cond
So