デバッガ

デバッガ（）とは、デバッグ作業を支援するコンピュータプログラムのこと。利用者がデバッグ対象プログラムを対話的に動作／一時停止させたり、プログラムが使っている変数の一覧や内容等を表示させたりする機能がある。では統合開発環境に含まれていることが多い。また、インサーキット・エミュレータ (ICE) などでは、ハードウェアと連携して動作する。「デバッガー」と表記することもある。また、デバッグを行なう作業者のことをデバッガあるいはデバッガーと呼ぶこともある。
インタプリタには内蔵されていることもある。たとえばPerlは起動時に codice_1 オプションを指定することで、デバッガモードになる。
概要.
デバッガの目的.
ソフトウェアを設計・開発する際、プログラム作成開始段階では少なからず誤り（エラーあるいはバグ）が含まれており、設計どおりに動作しなかったり、出力結果が不正確だったりすることが多い。そのため、ソフトウェアのテスト実行をしつつ、正しい動作をするようにプログラムを修正し、不具合の原因となるバグを取り除いていく作業、すなわちデバッグを行なう必要がある。古典的かつ原始的な手法としては、ソースコードを1行ずつ目視で検査（コードレビュー）しながら思考実験により論理的な誤りを見つけ出す方法が挙げられる。また典型的には、標準出力などを利用して実際の変数の状態やプログラム実行順序などを時系列に表示しつつ、プログラム動作および不具合再現手順や発生タイミングを確認する技法が用いられることも多い。C言語のprintf関数にちなんで、この手法を「printfデバッグ」と呼ぶこともある。プログラムのテスト実行によって、ソースコードの流れ、および変数などの中身を確認しながら、その動作の問題点を探ることになる。これにより、変数の取り扱いや計算式、条件分岐などにおける誤りを見つけ出し、修正していく。
しかし、ソフトウェアの規模が大きくなるにつれて、通例バグの数も比例して増え、複雑で大規模なプログラムにおいて不具合の原因がどこに存在するのかを特定することが困難になっていく。標準出力が使えない環境や、ログが瞬時に流れてしまうようなケースではprintfデバッグ技法は適用しにくい。また、本来は必要のないデバッグ用の余分な出力処理を埋め込むことで、ソースコードのメンテナンス性が低下するだけでなく、システムに対する副作用が発生してタイミングがずれるなどして、再現させたいはずの不具合が発生しなくなってしまうこともある。複雑なデータ構造や膨大なデータ列など、単純にテキストで表現することが難しいケースもある。
そこで、プログラミングツールのひとつであるデバッガを利用して、テスト実行やデバッグの効率化および負担軽減を行なうようになった。デバッガを用いることで、前述の思考実験やprintfデバッグでは難しかった、高度な実行時検証をすることができるようになる。
デバッガの原理は、デバッグ対象のプロセスにアタッチして、プロセスの実行状況に関する情報の双方向通信を行なうことである。オペレーティングシステムにはデバッガの実装に利用可能なAPIが用意されていることもある。コンパイルすると、（人間には理解しにくい）機械語や中間表現になるプログラミング言語であっても、デバッグ用にコンパイル＆ビルドする際に、ソースコードに関するメタデータである「プログラムデータベース」(program database; pdb) と呼ばれる追加情報を生成し、デバッグ実行時にこのシンボル情報を参照することで、デバッガは現在実行中のプログラムステップ位置などを特定することができる。
デバッガは性能解析および性能強化にも使われることがあるが、これらは本来プロファイラと呼ばれる別のツールの役割である。デバッグ用にコンパイル＆ビルドされたプログラムは、余分なコードや最適化されていないコードを含んでおり、プログラム本来の性能指標としては使うべきではない。また、プログラムにデバッガをアタッチすることでオーバーヘッドを生じることもある。
デバッガの機能.
多くのデバッガは、大体似たような機能を持つ。
デバッガの例.
多くのオペレーティングシステムやプログラミング言語処理系にはコマンドラインで扱えるデバッガが付属するほか、ほとんどの統合開発環境にはGUIによって情報の直感的かつ高度な視覚化が可能なビジュアルデバッガが付属している。