JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:使用 dbx 调试程序     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  dbx 入门

2.  启动 dbx

3.  定制 dbx

4.  查看和导航到代码

5.  控制程序执行

6.  设置断点和跟踪

7.  使用调用堆栈

8.  求值和显示数据

求变量和表达式的值

验证 dbx 使用的变量

当前函数作用域之外的变量

打印变量、表达式或标识符的值

打印 C++ 指针

对 C++ 程序中未命名参数求值

非关联化指针

监视表达式

关闭显示(取消显示)

为变量赋值

对数组求值

数组分片

C 和 C++ 的数组分片语法

Fortran 数组分片语法

使用分片

使用跨距

使用美化打印

9.  使用运行时检查

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

17.  使用 dbx 调试 Java 应用程序

18.  在机器指令级调试

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

A.  修改程序状态

B.  事件管理

C.  宏

D.  命令参考

索引

对数组求值

对数组求值的方法与对其他类型变量求值的方法相同。

以下是 Fortran 数组示例:

integer*4 arr(1:6, 4:7)

要对数组求值,可使用 print 命令。例如:

(dbx) print arr(2,4)

使用 dbx print 命令可以对大型数组的一部分求值。数组求值包括:

进行数组分片时,可以使用跨距,也可以不使用跨距。(缺省跨距值为 1,即表示打印每个元素。)

数组分片

C、C++ 和 Fortran 语言中的 printdisplaywatch 命令支持数组分片。

C 和 C++ 的数组分片语法

对于数组的每个维度,对数组分片的完整 print 命令语法如下:

print array-expression [first-expression .. last-expression : stride-expression]

其中:

array-expression

求值结果应为数组或指针类型的表达式。

first-expression

要输出的第一个元素。缺省值为 0。

last-expression

要输出的最后一个元素。缺省值为数组上界。

stride-expression

跨距长度(跳过的元素个数为 stride-expression-1)。缺省值为 1。

第一个表达式、最后一个表达式和跨距表达式都是可选表达式,它们的求值结果应为整数。

例如:

(dbx) print arr[2..4]
arr[2..4] =
[2] = 2
[3] = 3
[4] = 4
(dbx) print arr[..2]
arr[0..2] =
[0] = 0
[1] = 1
[2] = 2

(dbx) print arr[2..6:2]
arr[2..6:2] =
[2] = 2
[4] = 4
[6] = 6

Fortran 数组分片语法

对于数组的每个维度, 对数组分片的完整 print 命令语法如下:

print array-expression [first-expression : last-expression : stride-expression]

其中:

array-expression

求值结果应为数组类型的表达式。

first-expression

某个范围内的第一个元素,也是要输出的第一个元素。缺省值为数组下界。

last-expression

某个范围内的最后一个元素,但如果跨距不等于 1,则可能不是要输出的最后一个元素。缺省值为数组上界。

stride-expression

跨距长度。缺省值为 1。

第一个表达式、最后一个表达式和跨距表达式都是可选表达式,它们的求值结果应为整数。对于 n 维数组片,请用逗号分隔各片的定义。

例如:

(dbx) print arr(2:6)
arr(2:6) =
(2) 2
(3) 3
(4) 4
(5) 5
(6) 6

(dbx) print arr(2:6:2)
arr(2:6:2) =
(2) 2
(4) 4
(6) 6

要指定行和列,请键入:

demo% f95 -g -silent ShoSli.f
demo% dbx a.out
Reading symbolic information for a.out
(dbx) list 1,12
    1         INTEGER*4 a(3,4), col, row
    2         DO row = 1,3
    3             DO col = 1,4
    4               a(row,col) = (row*10) + col
    5             END DO
    6         END DO
    7         DO row = 1, 3
    8                WRITE(*,’(4I3)’) (a(row,col),col=1,4)
    9        END DO
    10        END
(dbx) stop at 7
(1) stop at "ShoSli.f":7
(dbx) run
Running: a.out
stopped in MAIN at line 7 in file "ShoSli.f"
    7          DO row = 1, 3

要打印第 3 行,请键入:

(dbx) print a(3:3,1:4)
’ShoSli’MAIN’a(3:3, 1:4) =
        (3,1)   31
        (3,2)   32
        (3,3)   33
        (3,4)   34
(dbx)

要打印第 4 列,请键入:

(dbx) print a(1:3,4:4)
’ShoSli’MAIN’a(1:3, 1:4) =
        (1,4)   14
        (2,4)   24
        (3,4)   34
(dbx)

使用分片

以下是一个二维矩形 C++ 数组片示例(省略了缺省跨距 1)。

print arr(201:203, 101:105)

此命令输出大型数组的一部分元素。请注意,该命令省略了 stride-expression,使用的是缺省跨距值 1。

image:数组图,第 100 列至第 106 列和第 200 行至第 205 行。第 201 行至第 203 行的第 101 列至第 105 列中的元素带有阴影。

如上所示,前两个表达式 (201:203) 指定该二维数组的第一个维度中的数组片(三行一列)。数组片从第 201 行开始,到第 203 行结束。第二组表达式(以逗号与第一组表达式分开)用于定义第二个维度的数组片。该数组片从第 101 列开始,到第 105 列结束。

使用跨距

指示 print 跨越数组片时,dbx 只对该数组片中的某些元素求值,而跳过对其求值的各个元素之间一定数量的元素。

数组分片语法中的第三个表达式 stride-expression 指定跨距长度。stride-expression 值指定要输出的元素。缺省跨距值为 1,即: 对指定数组片中的所有元素求值。

以下数组与上一数组片示例使用的数组相同。这一次,print 命令中,第二个维度中数组片的跨距为 2。

print arr(201:203, 101:105:2)

如图所示,使用跨距 2 时,将打印所有第二个元素,而跳过所有其他元素。

image:数组图,第 100 列至第 106 列和第 200 行至第 205 行。第 201 行至第 203 行的第 101 列、第 103 列和第 105 列中的元素带有阴影。

对于省略的表达式,输出时取与数组的声明大小相等的缺省值。以下是如何使用简化语法的示例。

对于一维数组,请使用下列命令:

print arr

使用缺省边界打印整个数组。

print arr(:)

使用缺省边界和缺省跨距 1 打印整个数组。

print arr(::stride-expression)

使用跨距 stride-expression 打印整个数组。

对于二维数组,可使用以下命令打印整个数组。

print arr

要打印二维数组中第二个维度的所有第三个元素,请键入:

print arr (:,::3)