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

RTC での修正継続機能の使用

RTC を修正継続機能とともに使用すると、プログラミングエラーを簡単に分離して修正することができます。修正継続機能を組み合わせて使用すると、デバッグに要する時間を大幅に削減することができます。次に例を示します。


% cat -n bug.c
     1  #include <stdio.h>
     2  char *s = NULL;
     3   
     4  void
     5  problem()
     6  {
     7          *s = 'c';
     8  }
     9   
    10  main()
    11  {
    12          problem();
    13          return 0;
    14  }
    15   
% cat -n bug-fixed.c
     1  #include stdio.h
     2  cahr *s = NULL;
     3   
     4  void
     5  problem()
     6  {
     7   
     8          s = (cahr *)malloc(1);
     9          *s = 'c';
    10  }
    11   
    12  main()
    13  {
    14          problem();
    15          return 0;
    16  }

% cc -g bug.c
% dbx -C a.out
a.out のシンボル情報を読んでいます
rtld /usr/lib/ld.so.1 のシンボル情報を読んでます
librtc.so のシンボル情報を読んでいます
libc.so.1 のシンボル情報を読んでいます
libdl.so.1 のシンボル情報を読んでいます
(dbx) check -access
アクセス検査 - ON
(dbx) run
実行中: a.out 
(プロセス id 10804)
実行時検査を有効にしています...終了
非割り当て領域への書き込み (wua):
1 バイト書き込み を NULL ポインタを通して しようとしました。
現関数 :problem
    7   	*s = 'c';
(dbx) pop
main で停止しました 行番号 12  ファイル "bug.c"
   12   	problem();
(dbx) cp bug-fixed.c bug.c
(dbx) fix
修正中 "bug.c" ......
 pc は "bug.c":14  に移動しました
main で停止しました 行番号 14  ファイル "bug.c"
   14   	problem();
(dbx) cont

実行完了。終了コードは、0 です
(dbx) quit
'a.out' の下記のモジュールは変更されました (修正済み):
bug.c
プログラムを再構築することをお忘れなく。