我立刻怀疑这起车祸。一个方法中的浮点异常,其唯一算术是“除以sizeof(短)”。
我看着堆栈爬行&看到方法的偏移是“+91”。然后我检查了该方法的拆卸&确认程序计数器在事故发生时实际上是foobar。反汇编显示的指令为+90和+93但不是+91。
这是一种32位x86指令的方法,在应用程序的生命周期中会非常频繁地调用。这次事故已经被报道了3次。
这是怎么发生的?如何为这种情况设置调试陷阱?
答案 0 :(得分:0)
通常当你在一条指令中间出错时,由于流量控制不好(即:跳转,调用,retn),溢出,错误的解除引用或你的调试符号不同步而导致堆栈跟踪显示错误信息。你的第一步是每次都可靠地重现错误,否则你将无法捕获它,从那里我只是在调试器中运行它,强制条件使它爆炸,然后检查(调用)堆栈并注册到看看它们是否是有效值等。