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

dbx のサンプルセッション

以下の例では、上記のサンプルプログラム my_program を使用しています。

  1. -g フラグを付けてコンパイルとリンクを行います。次のように 、1 度にまたは 2 度に分けて実行できます。

    -g フラグ付きコンパイルとリンクを 1 度にまとめて行います。


     demo% f77 -o my_program -g a1.f a2.f a3.f

    コンパイルとリンクを分けて行います。


     demo% f77 -c -g a1.f a2.f a3.f 
     demo% f77 -o my_program a1.o a2.o a3.o

  2. 実行可能ファイル my_program について dbx を起動します。


    demo% dbx my_program
    my_program の読み込み中
    ld.so.1 の読み込み中
    libF77.so.4 の読み込み中
    libM77.so.2 の読み込み中
    libsunmath.so.1 の読み込み中
    libm.so.1 の読み込み中
    libc.so.1 の読み込み中
    libdl.so.1 の読み込み中
    libc_psr.so.1 の読み込み中

  3. stop in subnam と入力して、最初の実行可能文の前にブレークポイントを設定する。subnam は、サブルーチン、関数、ブロックデータサブプログラムを示します。

    main プログラム中の最初の実行可能文で停止します。


     (dbx) stop in MAIN 
     (2) stop in MAIN 

    通常 MAIN は大文字ですが、subnam は大文字でも小文字でもかまいません。

  4. run コマンドを入力して、dbx からプログラムを実行します。dbx の起動時に指定された実行可能ファイルの中で、プログラムが実行されます。

    dbx 内でプログラムを実行します。


    (dbx) run
    実行中: my_program
    (プロセス id 23395)
    mb.so.1 の読み込み中
    wcwidth.so.1 の読み込み中
    MAIN で停止しました 行番号 3  ファイル "a1.f"
        3           call mkidentity( twobytwo, n )
    (dbx) 

    ブレークポイントに到達すると、dbx はどこで停止したかを示すメッセージを表示します。上の例では、a1.f ファイルの行番号 3 で停止しています。

  5. print コマンドを使用して、値を出力します。

    n の値を出力します。


     (dbx) print n
     n = 2 

    マトリックス twobytwo を出力します。


    (dbx) print twobytwo 
    twobytwo =
        (1,1)       -1.0 
        (2,1)       -1.0 
        (1,2)       -1.0 
        (2,2)       -1.0 

    マトリックス array を出力します。


    (dbx) print array
    dbx: "array" は スコープ`my_program`a1.f`MAIN` に定義されていません
    dbx: 詳しくは 'help scope' をご覧ください
    (dbx) 

    ここで array は定義されていないため、出力は失敗します (mkidentity 内でのみ有効)。

  6. next コマンドを使用して、次の行に実行を進めます。

    次の行に実行を進めます。


    (dbx) next
    MAIN で停止しました 行番号 4  ファイル "a1.f"
        4  print *, determinant( twobytwo ) 
    (dbx) print twobytwo
    twobytwo = 
        (1,1)       1.0
        (2,1)       0.0
        (1,2)       0.0
        (2,2)       1.0
    
    (dbx) 

    next コマンドは現在のソース行を実行し、次のソース行で停止します。これは副プログラムの呼び出しを 1 つの文として数えます。

    nextstep コマンドを比較します。step コマンドは、ソースの次の行または副プログラムの次のステップを実行します。通常、次の実行可能ソース文がサブルーチンまたは関数呼び出しの場合、各コマンドは次の処理を行います。

    • step コマンドは、副プログラムのソースの最初の文にブレークポイントを設定します。

    • next コマンドは、呼び出し元のプログラム中で、呼び出しの後の最初の文にブレークポイントを設定します。

  7. quit コマンドを入力して、dbx を終了します。


     (dbx)quit		
     demo%