我如何获取有关使用 f2py 构建的 Python 模块的 运行 时间错误的信息

How can I get info on run time errors for Python modules built with f2py

编辑 3/6:抱歉,这是误报。它现在似乎正在工作。我相信 gfortran 上的 -g 标志和 --debug-capi 足以为 GDB(gnu 调试器)生成行号。我将做一个简短的回答,总结如何做到这一点,以防对其他人有帮助(对我来说是一种学习经验)。但是,请随时 post 对此进行改进的其他答案。如果可能的话,我特别希望能够在不使用 GDB 的情况下获取行号。

这一定是一个常见问题,但我找不到任何答案。错误出现在 Fortran 库中(我在下面称之为 f2.f90),但这是一个 运行 时间错误,直到我通过 Python.[= 使用代码时才会触发。 29=]

为了更明确一点:

  1. 我用gfortran编译了几个文件:

    gfortran -c f1.f90 f2.f90
    
  2. 我用 f2py:

    生成了一个模块
    f2py -c f1.o f2.o -m main main.f90
    
  3. 在python:

    import main
    
  4. 在python中调用子程序main,main里面:

    main.main()
    

我可以让它成功运行,但是当我玩 f2.f90 时,我经常会遇到一些错误,当这种情况发生时它在第 4 步并且会崩溃 python 并且只给我关闭它的选项。不幸的是,我没有得到有关 f2.f90 中哪一行导致问题或任何其他信息的信息。

那么,非常简单的问题,有没有办法让第 4 步为我提供有关 运行 时间崩溃的一些基本信息?主要是问题的行号。

我试过将 -g -fbacktrace 添加到 gfortran 调用,将 --debug-capi 添加到 f2py,然后将 gdb python 与回溯一起使用。这看起来很有希望,因为它至少告诉我有问题的文件是 f2.f90,但不是行号。如果我尝试 "backtrace full" 它会告诉我 No symbol table info available 这可能是保存行号信息的地方?

简而言之,这个标志组合似乎允许 gdb 在 f1.f90f2.f90:

中生成任何运行时错误的行号
C:\> gfortran -g -fbacktrace -c f1.f90 f2.f90
C:\> f2py --debug-capi -c -I. f1.o f2.o -m main main.f90
C:\> gdb python

(gdb) run main.py

其中 main.py imports/calls main.f90 即 using/calling f1.f90f2.f90。然后可以进行回溯以获得一些额外的信息。

(gdb) backtrace