dbx コマンドによるデバッグ

セグメント不正のデバッグ

プログラムでセグメント不正 (SIGSEGV) が発生するのは、プログラムが使用可能なメモリー範囲外のメモリーアドレスを参照したことを示します。

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

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 を使用してセグメント不正が発生した行番号を検出します。


demo% f77 -g -silent WhereSEGV.f
demo% ./a.out

*** TERMINATING  ./a.out
*** Received signal 11 SIGSEGV
Segmentation fault (core dumped)
demo% dbx a.out
a.out の読み込み中
rtld /usr/lib/ld.so.1 の読み込み中
libF77.so.3 の読み込み中
libsunmath.so.1 の読み込み中
libm.so.1 の読み込み中
libc.so.1 の読み込み中
libdl.so.1 の読み込み中
(dbx) run
実行中: a.out 
(プロセス id 2273)
mb.so.1 の読み込み中
wcwidth.so.1 の読み込み中
シグナル SEGV (フォルトのアドレスにマッピングしていません) 関数 MAIN 行番号 4  ファイル "WhereSEGV.f"
    4                   a(j) = (i * 10)
(dbx)