Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

样例 dbx 会话

下面的示例中使用称为 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

如何运行样例 dbx 会话

  1. 使用 - g 选项进行编译和链接。

    可以通过一两个步骤来完成此操作。

    • 要使用一个步骤完成编译和链接:
       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
  2. 对名为 my_program 的可执行文件启动 dbx
     demo% dbx my_program
     Reading symbolic information…
  3. 设置简单的断点。

    在主程序的第一个可执行语句处停止。

     (dbx) stop in MAIN
     (2) stop in MAIN

    尽管主程序 MAIN 必须全部为大写,但子例程、函数或块数据子程序的名称可以为大写或小写。

  4. 在启动 dbx 时指定的可执行文件中运行程序。
     (dbx) run
     Running: my_program
     stopped in MAIN at line 3 in file "a1.f"
         3         call mkidentity( twobytwo, n )

    到达断点时,dbx 会显示一条消息,指出其停止位置(本例中为文件 a1.f 的第 3 行)。

  5. 输出值。

    输出 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 中进行了定义。

  6. 继续执行到下一行。
    (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 命令会执行当前源代码行并在下一行处停止。它将各次子程序调用按独立的语句来计数。

  7. 退出 dbx
    (dbx)quit        
    demo%