Debugging 我如何处理gdb中的SIGFPE地址?

Debugging 我如何处理gdb中的SIGFPE地址?,debugging,fortran,gdb,Debugging,Fortran,Gdb,在gdb中运行可执行文件时,我遇到以下错误: Program received signal SIGFPE, Arithmetic exception. 0x08158307 in radtra_ () 在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件?如果有帮助的话,源语言是Fortran 在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件 这并不容易。您可以使用GDB命令,查找对全局变量和调用指令的访问权限,并猜测您在radtra中

在gdb中运行可执行文件时,我遇到以下错误:

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
    内的代码偏移量与生成代码的源行相关联

  • 请专家帮你猜。这可不便宜,因为精通这种逆向工程的人通常都能获得丰厚的报酬,并珍惜他们的时间

  • 在不重新编译或修改源代码的情况下,如何理解0x08158307使用的行号和文件

    这并不容易。您可以使用GDB命令,查找对全局变量和
    调用
    指令的访问权限,并猜测您在
    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我已经澄清了答案。