2012-01-14 49 views
3

我打来自C代码的fortran 90代码。有一个main()(在c中)在同一个文件中调用一个包装函数,它调用一个fortran子例程(实际上在liblibrary.a中)。我正在linux上工作。现在,我使用gdb来调试可执行文件,但它找不到main.c文件。我添加使用gdb - 没有源文件名为<something> - 英特尔编译器

directory /my/working/directory 

的工作目录但仍说,没有命名的main.c
如果键入listgdb它显示了我一张Fortran代码文件。如果我输入show language,它表示当前的源语言是auto; currently c
如果我运行可执行文件,然后中断它并查看堆栈,它会显示我正在调用的c函数,但它不会声明源文件,而是声明fortran子函数和函数。
我想调查,如果我正确地将变量从c传递给fortran和向后,我怀疑我不是。

同样的事情发生在idb,或多或少。当我尝试在main.c中暂停时,它说not found。我编译Fortran代码与这些标志:

-g -O0 -check bounds -warn all -traceback -align all -align rec8byte 

和C代码:

-g -O0 -Wall 

所有建议都欢迎。

+0

如果您输入“b 1”(在第一行代码中断),会得到什么结果?你通常会得到'Breakpoint 1 at 0xXXXXXXXX:file main.c,line 1.“你是否? – 2012-01-14 22:44:55

+0

我得到”Breakpoint 1 at 0x404f7f:file eos2_wrapper.f90,line 1.“,这是该子程序包装器的文件名fortran函数 - 所以我们已经在库liblibrary.a – simona 2012-01-14 23:06:24

+0

目录下/ my/working /目录指定了绝对路径,这是绝对路径还是源码目录的相对路径? – 2012-01-14 23:10:07

回答

2

你好,你需要额外的标志把调试信息放到你的可执行文件中。 以下是intel编译器的手册: http://cache-www.intel.com/cd/00/00/34/75/347599_347599.pdf 请按照第35页的方法尝试-debug full

+0

谢谢!这解决了我的问题。在同一本手册的第123页,他们说生成完整的调试信息的选项是-g。Isn这有点模糊吗? – simona 2012-01-14 23:24:57

+0

也许这个操作因为-g被更广泛地使用,所以发生。例如,gcc有相同的-g选项,它是linux的标准编译器:http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options然后-debug可以更好地控制调试信息。 – Eugen 2012-01-14 23:34:22

相关问题