繁体   English   中英

卡在跟踪SIGFPE /算术异常

[英]Stuck at tracking a SIGFPE/Arithmetic exception

我正在尝试调试在我没有源代码的库中引发的SIGFPE信号。 我正在使用gdb和asm布局来查看发生了什么。

这些是例外之前的说明:

   0xcd3fffa <_ZN8name_space11ClassName1MethodNameEdddd+830>     fstpl  -0x68(%ebp)                                    
B+ 0xcd3fffd <_ZN8name_space11ClassName1MethodNameEdddd+833>     fldl   -0x58(%ebp)                                    
   0xcd40000 <_ZN8name_space11ClassName1MethodNameEdddd+836>     fstpl  0x4(%esp)                                      
   0xcd40004 <_ZN8name_space11ClassName1MethodNameEdddd+840>     mov    0x8(%ebp),%eax                                 
   0xcd40007 <_ZN8name_space11ClassName1MethodNameEdddd+843>     mov    %eax,(%esp)                                    
  >0xcd4000a <_ZN8name_space11ClassName1MethodNameEdddd+846>     call   0xcd408c0 <_ZN8name_space11ClassName1AnotherMethodNameEd>   
   0xcd4000f <_ZN8name_space11ClassName1MethodNameEdddd+851>     mov    0x8(%ebp),%eax   

当我键入ni0xcd4000a处的指令转到0xcd4000a处的指令时, 0xcd4000f以下错误

Program received signal SIGFPE, Arithmetic exception.
0x0cd408e8 in name_space::ClassName::AnotherMethodName(double) () at /Path/to/ClassName.h:69

我对汇编不熟悉,但是我期望指令指针是0xcd408c0 ,其中0xcd408c0的指令从AnotherMethodName开始。 但是指令指针已跳到0xcd408e8地址。 仍然在AnotherMethodName()方法中。

    0xcd408e4 <_ZN8name_space11ClassName1AnotherMethodNameEd+36> fldz                                                          
    0xcd408e6 <_ZN8name_space11ClassName1AnotherMethodNameEd+38> fdivrp %st,%st(1)                                             
   >0xcd408e8 <_ZN8name_space11ClassName1AnotherMethodNameEd+40> fldz                                                          
    0xcd408ea <_ZN8name_space11ClassName1AnotherMethodNameEd+42> fucomip %st(1),%st   

0xcd408e8处的指令之后,它跳转到我的异常处理程序。

我已经进行了很多搜索,甚至达到了这一点。 但是目前我还不知道该如何继续。

我还检查了浮点寄存器,它们似乎不包含任何奇怪的值。

是什么引起了这个例外?

无法设置fldz因为它只是将寄存器设置为0

异常发生在fdivrp %st,%st(1)

您说您检查了“奇怪”值。 但以上必须除以零。 您也检查过ST是否为零吗? 必须为零。 不奇怪,只有零。

FDIVRP ST(i),ST(0)将ST(0)除以ST(i),将结果存储在ST(i)中,然后弹出寄存器堆栈

编辑:不确定那里正在发生什么。 检查您用来调用第三方软件的参数。 您可能已经传递了一些零值来表示项目数,这可能是由于库不喜欢的未初始化变量所致。 (对不起所有的猜测!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM