Oracle® Developer Studio 12.5: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2016 年 6 月
 
 

セグメント例外のデバッグ

プログラムでセグメント例外 (SIGSEGV) が発生した場合、そのプログラムは、使用可能なメモリーの範囲外のメモリーアドレスを参照しています。

    セグメント不正の主な原因を次に示します。

  • 配列インデックスが宣言された範囲外にある。

  • 配列インデックス名のつづりが間違っている。

  • 呼び出し元のルーチンでは引数に REAL を使用しているが、呼び出し先のルーチンでは INTEGER が使われている。

  • 配列インデックスの計算が間違っている。

  • 呼び出し元ルーチンの引数が足りない。

  • ポインタを定義しないで使用している。

dbx により問題を見つける方法

dbx を使用して、セグメント例外が発生したソースコード行を見つけます。

プログラムを使用してセグメント例外を生成します。

demo% cat WhereSEGV.f
    INTEGER a(5)
    j = 2000000
    DO 9 i = 1,5
        a(j) = (i * 10)
9    CONTINUE
    PRINT *, a
    END
demo%

dbx を使用して、dbx セグメント例外の行番号を見つけます。

demo% f95 -g -silent WhereSEGV.f
demo% a.out
Segmentation fault
demo% dbx a.out
Reading symbolic information for a.out
program terminated by signal SEGV (segmentation violation)
(dbx) run
Running: a.out
signal SEGV (no mapping at the fault address)
    in MAIN at line 4 in file "WhereSEGV.f"
    4                   a(j) = (i * 10)
(dbx)