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

如何获取使用f2py构建的Python模块的运行时错误信息,python,numpy,fortran,f2py,Python,Numpy,Fortran,F2py,编辑3/6:抱歉,这是一个假警报。它现在似乎起作用了。我相信gfortran上的-g标志和--debug capi毕竟足以为GDB(gnu调试器)生成行号。我将做一个简短的回答,总结如何做到这一点,以防它对其他人有帮助(这对我来说是一个学习经验)。但请随时发布更多的答案,以改进这一点。特别是,如果可能的话,我希望能够在不使用GDB的情况下获得行号。 这一定是个常见的问题,但我找不到任何答案。该错误位于Fortran库中(我在下面称之为f2.f90),但它是一个运行时错误,只有在通过Python使

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

这一定是个常见的问题,但我找不到任何答案。该错误位于Fortran库中(我在下面称之为f2.f90),但它是一个运行时错误,只有在通过Python使用代码时才会触发

要让它更明确一点:

  • 我使用
    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”,它将告诉我
    没有可用的符号表信息
    ,这可能是保存行号信息的地方?

    简而言之,这个标志组合似乎允许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
    导入/调用正在使用/调用
    f1.f90
    f2.f90
    main.f90
    。然后可以进行回溯以获取一些附加信息

    (gdb) backtrace
    

    你能显示你现在收到的错误信息吗?您是否尝试过使用
    -fcheck=all
    (可能会影响性能)进行编译?我现在不在工作计算机旁,因此现在无法进行编译,但稍后将进行编译。我认为这是一个错误。但要明确的是,我并不真正关心这个具体的错误。我知道这是一个运行时错误,导致b/c我还没有加载数据。我只关心如何获得运行时错误的行号。