Oracle® Developer Studio 12.5:使用 dbx 调试程序

退出打印视图

更新时间: 2016 年 6 月
 
 

对数组求值

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

以下是 Fortran 数组样例的示例:

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

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

(dbx) print arr(2,4)

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

  • 数组分片-输出多维数组的任意矩形形状的 n 维区块。

  • 数组跨距-按固定模式仅输出指定分片(可以是整个数组)中的某些元素。

进行数组分片时,可以使用跨距,也可以不使用跨距。(缺省跨距值为 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)