我如何获取有关使用 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=]
为了更明确一点:
我用gfortran
编译了几个文件:
gfortran -c f1.f90 f2.f90
我用 f2py
:
生成了一个模块
f2py -c f1.o f2.o -m main main.f90
在python:
import main
在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.f90
或 f2.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.f90
和 f2.f90
。然后可以进行回溯以获得一些额外的信息。
(gdb) backtrace
编辑 3/6:抱歉,这是误报。它现在似乎正在工作。我相信 gfortran 上的 -g
标志和 --debug-capi
足以为 GDB(gnu 调试器)生成行号。我将做一个简短的回答,总结如何做到这一点,以防对其他人有帮助(对我来说是一种学习经验)。但是,请随时 post 对此进行改进的其他答案。如果可能的话,我特别希望能够在不使用 GDB 的情况下获取行号。
这一定是一个常见问题,但我找不到任何答案。错误出现在 Fortran 库中(我在下面称之为 f2.f90
),但这是一个 运行 时间错误,直到我通过 Python.[= 使用代码时才会触发。 29=]
为了更明确一点:
我用
gfortran
编译了几个文件:gfortran -c f1.f90 f2.f90
我用
生成了一个模块f2py
:f2py -c f1.o f2.o -m main main.f90
在python:
import main
在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.f90
或 f2.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.f90
和 f2.f90
。然后可以进行回溯以获得一些额外的信息。
(gdb) backtrace