デバッグ

デバッグとは

デバッグするのは人間です。問題を解決するのは神です...

えーと、人間 という部分はこのセクションで紹介することです。そして になれるかどうかは貴方次第です!

プログラムが思い通りに動かない時を想定してみると、そのプログラムにはバグまたは複数のバグが潜んでいると考えられます。これはコンパイル・エラーが原因ではありません - コンパイル・エラーは単純なエラーで先のバグと比較すると簡単に解決できます。その理由は、どこが問題であるかコンパイラが教えてくれるからです。言い換えると、バグ はプログラムを実行した時に発生するエラーで、解決するのは難しい (時には非常に難しい!) です。

バグがないと考えているプログラムは、必ずしも完璧にバグが無いわけではありません。我々が試行できることの全てがプログラムに潜むバグの数を減らします。バグを取り除く作業は デバッグ と呼ばれ、デバッグに使用するツールのことを デバッガ と言います。Anjuta はとてもユーザフレンドリでパワフルなデバッグ環境 (実際は、コマンドラインで使用するパワフルな GNU デバッガ gdb の GUI ラッパー版です) を提供します。

デバッガはプログラムの実行経過をたどって問題がありそうな部分を探しあてて、プログラムの実行を観察するために必要な情報をたくさん提供します。

デバッグの対象

デバッグを始める前に、デバッグの対象 が何であるかを理解することが重要です。デバッグの対象はバグの実体に関係しており、プログラムを操作している最中に互いに影響を与えるものです。デバッグの対象には四つの種類があります:

  1. 実行型式ファイル

  2. シンボル・テーブル

  3. コア・ファイル

  4. プロセス

好きな時にこれらの対象のうち一つだけを有効にすることができます。デバッガを使う際に、これらの対象の全てを有効にする必要はありませんが、デバッグ作業を効率化するために、いくつか相互の連携が必要になってきます。例えば、[ 実行型式ファイル、シンボル・テーブル、プロセス ] という連携や [ 実行型式ファイル、シンボル・テーブル、コア・ファイル ] といった連携などです。

デバッグの対象のひとつである 実行型式ファイル は、デバッガを起動して実行型式ファイルを読み込むときに有効になります。

シンボル・テーブル は自動的に実行型式ファイルから読み込まれるので、各々操作する必要はありません。シンボル・テーブルは、プログラムのソース・コードに記述されたいろいろなシンボル (変数名や定数名など) をデバッガが識別するのに必要です。その情報はプログラムをコンパイルする際に追加されます (プログラムがデバッグ・オプション付きでコンパイルされた場合にのみ - 詳細は the chapter called コンパイラ・オプションの設定> を参照下さい)。

コア・ファイル は、デバッガがコア・ファイルを読み込んだときに有効になります。コア・ファイルとはプログラムのメモリイメージで、通常は何か不正な処理が実行されたときにカーネルによってダンプされます。コア・ファイルは変数の内容、レジスタの値そしてエラーが発生した時点でのスタックのトレース情報を提供します。コア・ファイルを調査することで、プログラムのどの部分でおかしな処理を行ってコアがダンプしたかを見つけることが可能になります。

プロセス はデバッガ配下でプログラムが実行された時、または既に起動中のプロセスを追加した時に有効になります。

デバッガの起動と停止

デバッガを起動する場合は、メニュー・アイテム デバッグ(_D)->デバッガの起動 を選択して下さい。すると現在開発中のプロジェクトの実行型式ファイルを使ってデバッガが起動します。もしプロジェクトが開かれていない場合、現在編集しているファイルの実行型式ファイルを読み込みます。またプロジェクトが開かれておらず、さらに現在編集しているファイルもない場合、デバッガは起動しますが、実行型式ファイルは読み込みません。その場合は実行型式ファイルを手動で読み込んで下さい。

デバッガを起動したら、デバッグ・モードに移行します。デバッグが完了したら、メニュー・アイテム デバッグ(_D)->デバッガの解放 を選択してデバッグ・モードを終了して下さい。

実行型式ファイルの読み込み

既にプロジェクトまたはファイルが開かれている場合、デバッガは自動的にその実行型式ファイルを読み込みます。別の実行型式ファイルを読み込む場合は、メニュー・アイテム デバッグ(_D)->実行型式の読み込み(_X)… を選択して下さい。ファイル選択ダイアログが表示されます。デバッグする実行型式ファイルを選択して OK ボタンをクリックして下さい。

プロセスに追加する

起動中のプロセスをデバッガに追加することが可能です。メニュー・アイテム デバッグ(_D)->プロセスに取り込む(_A)… を選択して下さい。すると、システムで起動中の全プロセスの一覧が表示されます。

Figure 1. プロセス追加ダイアログ

追加するプロセスを選択して OK をクリックして下さい。そして先に実行型式ファイル (とシンボル・テーブル) がデバッガの中に読み込まれていることを確認して下さい。

複数のクェスチョンマーク (??) がデバッグ作業中に表示されると、追加したプロセスと実行型式ファイルが一致していない状態です。

コア・ファイルの読み込み

メニュー・アイテム デバッグ(_D)->core ファイルの読み込み(_C)… を選択してコア・ファイルを読み込みます。ファイル選択ダイアログの中からコア・ファイルを選択して、OK をクリックして下さい。コア・ファイルを読み込む時に、先に実行型式ファイル (とシンボル・テーブル) が読み込まれていることを確認して下さい - そうでないと、デバッグがおかしくなるかもしれません!

複数のクェスチョンマーク (??) がデバッグ作業中に表示されると、追加したプロセスと実行型式ファイルが一致していない状態です。