我在使用gdb在Mac OS Mountain Lion上调试Fortran程序时遇到问题。当我调用
时gdb (fortran executable name)
从终端,我收到以下消息:
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries.
warning: Could not find object file "/Users/fx/devel/gcc/ibin-462-x86_64/x86_64-apple-darwin11/libgfortran/.libs/backtrace.o"
- no debug information available for "../../../gcc-4.6.2-RC-20111019/libgfortran/runtime/backtrace.c". ... (an extremely long list of analogous warnings pop up for libgcc and libquadmath libraries) ...
基本上,gdb正在路径(/ Users / fx / ...)中搜索一堆不存在的目标文件。
除此之外,调试器似乎工作正常。有谁知道如何解决这个问题?
附注,gdb在C程序上运行正常。 C和Fortran编译器都运行顺畅; gcc包含在Xcode命令行工具中,而gfortran是从一个单独的源安装的(路径:/ usr / local / bin / gfortran)。
我试着阅读其他几个答案,但似乎没有人能够解决这个问题。
答案 0 :(得分:1)
您可以将lldb与Fortran一起使用。举一个示例程序。
PROGRAM test
IMPLICIT NONE
INTEGER :: i
INTEGER, DIMENSION(10) :: array
DO i = 1, 10
array(i) = i
END DO
END PROGRAM
您可以在lldb
中运行它$ lldb -- test
(lldb) target create "test"
Current executable set to 'test' (x86_64).
(lldb) b test.f:9
Breakpoint 1: where = test`test + 17 at test.f:9, address = 0x0000000100000eac
(lldb) run
Process 869 launched: '/Users/mark/Desktop/test' (x86_64)
Process 869 stopped
* thread #1: tid = 0xb5f5, 0x0000000100000eac test`test + 17 at test.f:9, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000eac test`test + 17 at test.f:9
6 INTEGER, DIMENSION(10) :: array
7
8 DO i = 1, 10
-> 9 array(i) = i
10 END DO
11
12 END PROGRAM
(lldb) c
Process 869 resuming
Process 869 stopped
* thread #1: tid = 0xb5f5, 0x0000000100000eac test`test + 17 at test.f:9, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000eac test`test + 17 at test.f:9
6 INTEGER, DIMENSION(10) :: array
7
8 DO i = 1, 10
-> 9 array(i) = i
10 END DO
11
12 END PROGRAM
(lldb) c
Process 869 resuming
Process 869 stopped
* thread #1: tid = 0xb5f5, 0x0000000100000eac test`test + 17 at test.f:9, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000eac test`test + 17 at test.f:9
6 INTEGER, DIMENSION(10) :: array
7
8 DO i = 1, 10
-> 9 array(i) = i
10 END DO
11
12 END PROGRAM
(lldb) c
Process 869 resuming
Process 869 stopped
* thread #1: tid = 0xb5f5, 0x0000000100000eac test`test + 17 at test.f:9, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000eac test`test + 17 at test.f:9
6 INTEGER, DIMENSION(10) :: array
7
8 DO i = 1, 10
-> 9 array(i) = i
10 END DO
11
12 END PROGRAM
(lldb) p array
(int [11]) $0 = ([0] = 1, [1] = 2, [2] = 3, [3] = 0, [4] = 0, [5] = 0, [6] = 0, [7] = 0, [8] = 0, [9] = 0, [10] = 0)
(lldb)
有一点需要注意。 lldb本身并不了解Fortran,但你仍然可以使用C等价物。例如,如果要检查fortran数组索引array(3)
,则需要使用等效于C的
(lldb) p array[2]
(int) $1 = 3
(lldb)
具有C或C ++等价物的所有东西都可以使用。派生类型将像结构一样运行......所有常规的lldb命令都可以工作。您可以更改堆栈帧。你可以设置断点,你可以步骤说明等等......这一切都可以正常工作。