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 の printdisplay、および watch コマンドでサポートされています。

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++ 配列の 2 次元の矩形の断面で、デフォルトの刻み値の 1 が省略されています。

print arr[201..203][101..105]

このコマンドは、大型配列の要素のブロックを出力します。stride-expression が省略され、デフォルトの刻み値である 1 が使用されていることに注意してください。

image:列が 100 から 106 までで、行が 200 から 205 までの配列の図列 101 から 105 のまでで、行 201 から 203 までの要素は網掛けされています。

最初の 2 つの式 (201:203) は、この 2 次元配列の第 1 次元 (3 行で構成される列) を指定します。配列の断面は行 201 から始まり、行 203 で終わります。次の組の式は最初の組とコンマで区切られ、第 2 次元の配列の断面を定義します。配列の断面は列 101 から始まり、列 105 で終わります。

刻みの使用

print コマンドに、配列の断面全体を刻むように指示すると、dbx は断面に含まれる特定の要素だけを評価し、それぞれの間の一定の数の要素をスキップします。

配列の断面化の構文の 3 番目の式 stride-expression は、刻み幅の長さを指定します。stride-expression の値は出力する要素を指定します。刻み幅のデフォルト値は 1 です。このとき、指定された配列の断面のすべての要素が評価されます。

次の例は、前の断面の例で使用した同じ配列です。今回は、print コマンドに、第 2 次元の断面に 2 の刻み幅を含めます。

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

図で示すとおり、刻み値として 2 を指定すると、各行を構成する要素が 1 つおきに出力されます。

image:列が 100 から 106 までで、行が 200 から 205 までの配列の図列 101、103、および 105 の、行 201 から 203 までの要素は網掛けされています。

print コマンドの配列の断面の定義を構成する式を省略すると、配列の宣言されたサイズに等しいデフォルト値が使用されます。次の例に、短縮形の構文の使用方法を示します。

1 次元配列の場合

print arr

デフォルトの境界で配列全体を出力します。

print arr(:)

デフォルトの境界とデフォルトの刻み (1) で、配列全体を出力します。

print arr(::stride-expression)

配列全体を stride-expression の刻み幅で出力します。

2 次元配列の場合、次のコマンドは配列全体を出力します。

print arr

次のコマンドは、2 次元配列の第 2 次元の要素を 2 つおきに出力します。

print arr (:,::3)