GNUデバッガ
C言語で書かれた以下のソースコードを考える。
Linux上のGCCコンパイラを使用する場合、生成されたバイナリに適切なデバッグ情報を含めるために-gフラグを使用して上記のコードをコンパイルしなければならない。これにより、GDBを使用してバイナリを検査できる。上記のコードを含むファイルが example.c という名前であると仮定すると、コンパイルのためのコマンドは次の様になる。
そして、バイナリを実行できるようになった。
サンプルコードを実行するとセグメンテーションフォールトが発生するので、GDBを使用して問題を検査することができる。
この問題は8行目にあり、strlen関数を呼び出す際に発生する (引数 s が NULL であるため)。strlen の実装 (インライン関数かどうか) に応じて出力が異なる場合がある。
コマンド bt でプログラムのスタック・トレースをとると、main関数からソースコードの階層を降りてstrlen関数が呼び出されている流れを確かめられる。
この問題を修正するには、変数 a (main関数内) に有効な文字列を含まなければならない。コードの修正版は次の通りである。
GDB内で実行ファイルを再コンパイルして実行すると、正しい結果が得られるようになった。
GDBは printf の出力を画面に表示し、プログラムが正常に終了したことをユーザに知らせる。