デバッグ

デバッグとは

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

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

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

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

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

デバッグの対象

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

  1. 実行型式ファイル

  2. シンボル・テーブル

  3. コア・ファイル

  4. プロセス

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

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

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

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

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