我有一个庞大的,混合的C ++和Fortran代码库,我试图调试。
该程序是使用GCC和GNU Fortran 4.8版构建的。 Fortran代码使用-c -g -cpp -ffixed-line-length-none -ffree-line-length-none -fcoarray=single -fno-underscoring -fPIC
构建,C ++代码使用-g -Wall -Wno-reorder -Wno-parentheses -std=c++11 -Wno-unknown-pragmas -fPIC
构建。该计划与g++ -g ... -lgfortran
。
当我在GDB中运行程序时,我可以使用break my_func.f90:35
在Fortran代码中设置断点。但是,当程序遇到该断点时,调试器似乎进入无限循环,试图打印出堆栈跟踪。如果我此时按 Ctrl + C ,我会得到一个截断的堆栈跟踪,如下所示:
^CBreakpoint 2, my_func (accinfile=Quit
(gdb)
所以程序已经到了断点,看起来堆栈跟踪出了问题。如果它在C ++代码中断,但在堆栈跟踪中使用Fortran函数,我将堆栈跟踪提升到Fortran部分,但此时再次挂起。
我已经确认GDB可以使用非常简单的C ++ / Fortran程序。
有没有人遇到过这种行为?有没有已知的解决方案?