Debugging 我如何处理gdb中的SIGFPE地址?
在gdb中运行可执行文件时,我遇到以下错误:Debugging 我如何处理gdb中的SIGFPE地址?,debugging,fortran,gdb,Debugging,Fortran,Gdb,在gdb中运行可执行文件时,我遇到以下错误: Program received signal SIGFPE, Arithmetic exception. 0x08158307 in radtra_ () 在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件?如果有帮助的话,源语言是Fortran 在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件 这并不容易。您可以使用GDB命令,查找对全局变量和调用指令的访问权限,并猜测您在radtra中
Program received signal SIGFPE, Arithmetic exception.
0x08158307 in radtra_ ()
在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件?如果有帮助的话,源语言是Fortran
在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件
这并不容易。您可以使用GDB命令,查找对全局变量和调用
指令的访问权限,并猜测您在radtra
中的位置。例程越大,编译器对其应用的优化就越多,执行的调用和全局变量访问也就越少,这就越困难
如果你猜不到,你唯一的选择是:
-g
标志重新生成应用程序,但不修改所有其他编译选项,然后使用addr2line
将地址转换为行号。(这是您应该从一开始就构建应用程序的方式。)radtra\uu
的源代码(同样使用相同的标志,但添加-g
)。您应该能够将objdump-d radtra.o
的输出与反汇编
的输出进行匹配。获得匹配后,从readelf-wl radtra.o
或objdump-g radtra.o
读取输出,以将radtra\u
内的代码偏移量与生成代码的源行相关联调用
指令的访问权限,并猜测您在radtra
中的位置。例程越大,编译器对其应用的优化就越多,执行的调用和全局变量访问也就越少,这就越困难
如果你猜不到,你唯一的选择是:
-g
标志重新生成应用程序,但不修改所有其他编译选项,然后使用addr2line
将地址转换为行号。(这是您应该从一开始就构建应用程序的方式。)radtra\uu
的源代码(同样使用相同的标志,但添加-g
)。您应该能够将objdump-d radtra.o
的输出与反汇编
的输出进行匹配。获得匹配后,从readelf-wl radtra.o
或objdump-g radtra.o
读取输出,以将radtra\u
内的代码偏移量与生成代码的源行相关联显然,该文件包含
radtra()
。要找到行,请重新编译代码以进行调试。我想知道是否可以在不重新编译的情况下获得有关地址0x08158307的更多信息。您可以查看程序集并猜测它可能是哪一行。。。祝你好运。使用addr2line
实用程序可能会有一些运气。显然,它是包含radtra()
的文件。要找到行,请重新编译代码以进行调试。我想知道是否可以在不重新编译的情况下获得有关地址0x08158307的更多信息。您可以查看程序集并猜测它可能是哪一行。。。祝你好运。addr2line
实用程序可能会给你带来好运。回答得很好。还有一个问题:什么是disas
?@wander95我已经澄清了答案。答案很好。还有一个问题:什么是disas
?@wander95我已经澄清了答案。