无法在GDB中提取FPE发生的值

时间:2017-07-06 10:14:32

标签: debugging fortran gdb gfortran fortran77

我接受了这个问题Gfortran does not tell me what sort of FPE it is的评论中给出的建议,即启动GDB,为该行设置断点并检查操作的值。一开始,我的程序基于Fortran 77代码(我计划在运行此"测试用例"理想主义的CFD数据测试后将其迁移到F90)并在Ubuntu 16.04 LTS上使用NetCDF共享库。我使用gfortran 4.8.5编译器(如果需要可以升级到5.x)。

这是程序编译的方式

gfortran -Wall -O0 -c -g -fbacktrace -ffpe-trap=invalid,denormal,zero,overflow,underflow ${tool}.f ${ncdf_incs}

现在我在程序所在的目录中启动了gdb,然后输入了

break inv_cart.f:1221

这是FPE发生的地方(除以零错误)。当我这样做时,我收到了这条消息 -

  Make breakpoint based on future shared library load (y/n) ?

所以我搜索了这个问题,我之前得到了这个Q / A - How to set breakpoints with shared libraries 这就是我做的事情

set breakpoint pending on
break inv_cart.f:1221

更新

我有疏忽。运行休息后,我收到此错误消息

No symbol table is loaded. Use the "file" command
Breakpoint 1 (inv_cart.f:1221) is pending. 

END UPDATE

执行此操作后,我得到的错误是我在gdb中运行inv_cart时所得到的错误,或者是独立的错误。

Program received signal SIGFPE - arithmetic exception

后跟一个内存地址和几个问号后跟()。 所以我退出gdb然后它告诉我有一个仍在激活的调试会话。

所以我的问题仍然存在 - 如何获取FPE发生的值?

1 个答案:

答案 0 :(得分:1)

在我发现更新后,这是一个直截了当的问题。

我查了一下这个问题 - gdb no symbol table is loaded 然后我继续做了这个

gapminder
filter(continent == "Asia")
group_by(year)
summarise(mean_pop = mean(pop))

最后加载了符号表,令我高兴的是,我通过gdb再次运行程序,并能够打印FPE发生的代码段的值。