大佬教程收集整理的这篇文章主要介绍了c – 如何跟踪SIGFPE /算术异常,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我用gdb调试了应用程序,捕获异常,但不幸的是,操作触发异常似乎也会垃圾堆栈,所以我无法获得任何关于我的代码中导致发生的地方的详细信息.我可以得到的唯一的细节是触发异常的操作(从以下堆栈跟踪):
3 raise() 0x402720ac 2 __aeabi_uldivmod() 0x400bb0b8 1 __divsi3() 0x400b9880
__aeabi_uldivmod()正在执行一个无符号的长时间划分和提醒,所以我尝试了强力的方法,并搜索我的代码可能使用该操作的地方,但没有太多的成功,因为它被证明是一个艰巨的任务.此外,我还试图检查潜在的部门为零,但代码基础却相当大,并检查每个部门的操作,这是一个麻烦和有点愚蠢的方法.所以必须有一个更聪明的方式来弄清楚发生了什么.
当调试器无法做很多帮助时,是否有任何技巧来追踪这种异常的原因?
更新:对十六进制数进行处理后,转储内存并进行堆栈取证(谢谢Crashworks)我在ARM编译器文档中遇到了这个gem(即使我没有使用ARM的编译器):
所以我把一个断点放在__aeabi_idiv0(_aeabi_ldiv0)et Voila !,我完整的堆栈跟踪完全被丢弃.感谢大家的非常翔实的答案!
免责声明:“获奖”答案是单独和主观地考虑到我的调查工作的建议的重量,因为多个信息丰富,真正有用.
以上是大佬教程为你收集整理的c – 如何跟踪SIGFPE /算术异常全部内容,希望文章能够帮你解决c – 如何跟踪SIGFPE /算术异常所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。