您可以将 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 命令都将起作用。您可以更改堆栈帧。您可以设置断点,可以执行指令等等......这一切都会起作用。