下面的示例中使用称为 my_program 的样例程序。
用于调试的主程序 a1.f:
PARAMETER ( n=2 ) REAL twobytwo(2,2) / 4 *-1 / CALL mkidentity( twobytwo, n ) PRINT *, determinant( twobytwo ) END
用于调试的子例程 a2.f:
SUBROUTINE mkidentity ( array, m ) REAL array(m,m) DO 90 i = 1, m DO 20 j = 1, m IF ( i .EQ. j ) THEN array(i,j) = 1. ELSE array(i,j) = 0. END IF 20 CONTINUE 90 CONTINUE RETURN END
用于调试的函数 a3.f:
REAL FUNCTION determinant ( a ) REAL a(2,2) determinant = a(1,1) * a(2,2) - a(1,2) * a(2,1) RETURN END
可以通过一两个步骤来完成此操作。
demo% f95 -o my_program -g a1.f a2.f a3.f
demo% f95 -c -g a1.f a2.f a3.f demo% f95 -o my_program a1.o a2.o a3.o
demo% dbx my_program Reading symbolic information…
在主程序的第一个可执行语句处停止。
(dbx) stop in MAIN (2) stop in MAIN
尽管主程序 MAIN 必须全部为大写,但子例程、函数或块数据子程序的名称可以为大写或小写。
(dbx) run Running: my_program stopped in MAIN at line 3 in file "a1.f" 3 call mkidentity( twobytwo, n )
到达断点时,dbx 会显示一条消息,指出其停止位置(本例中为文件 a1.f 的第 3 行)。
输出 n 的值:
(dbx) print n n = 2
要输出矩阵 twobytwo,格式可能会有所不同:
(dbx) print twobytwo twobytwo = (1,1) -1.0 (2,1) -1.0 (1,2) -1.0 (2,2) -1.0
请注意,不能输出矩阵数组的原因是此处未定义 array,而只是在 mkidentity 中进行了定义。
(dbx) next stopped in MAIN at line 4 in file "a1.f" 4 print *, determinant( twobytwo ) (dbx) print twobytwo twobytwo = (1,1) 1.0 (2,1) 0.0 (1,2) 0.0 (2,2) 1.0 (dbx) quit demo%
next 命令会执行当前源代码行并在下一行处停止。它将各次子程序调用按独立的语句来计数。
(dbx)quit demo%