導入
ウィクショナリーの「デバッガ」を参照してください。 |
デバッガ、デバッガ、またはデバッガ(英語から)は、開発者がプログラムのバグを分析するのに役立つソフトウェアです。これを行うために、プログラムを段階的に実行したり、変数の値をいつでも表示したり、条件やプログラムの行にブレークポイントを設定したりすることができます。
これは、トラブルシューティングプロセスのコンピュータプログラミングへの応用です。

使用
デバッグ対象のプログラムはデバッガを通じて実行され、正常に実行されます。次に、デバッガは、プログラマがさまざまな手段でプログラムの実行を停止 (プログラムの実行を一時停止) したり、メモリ内のさまざまな変数の内容を観察したりできるようにすることで、プログラムの実行を制御する可能性をプログラマに提供します。実行状態は、たとえば障害の原因を特定するために観察できます。
プログラムの実行が停止されると、デバッガがソースレベル デバッガまたはシンボリック デバッガの場合、元のソース コード内の現在の実行位置が表示されます。低レベル デバッガまたは機械語デバッガの場合は、逆アセンブルされた行が表示されます。
多くのデバッガでは、プロセッサのレジスタとメモリの状態を監視するだけでなく、デバッグされたプログラムに制御を戻す前にそれらを変更することもできます。これらは、特定のソフトウェア保護を見つけて無効にするために使用され、クラックの作成につながる可能性があります。したがって、特定のソフトウェアは、デバッガがどのように機能するかを知っており、そのような変更を防止したいと考えて、アンチデバッグ技術 (アンチデバッグトリック) を実装します。
既知のデバッガ
- アドブ
- アンチC
- ブロードウェイ
- CodeView とVisual Studioデバッガー
- ダイダロス
- dbx
- DUMA 意図しないメモリアクセスを検出 – 電気柵の分岐点
- ダイナミック デバッグ テープ (DDT) および ODT
- 電気柵
- エトナス・トータルビュー
- ファイアバグ
- gdb またはGnu DeBugger 、クロスデバッグで gdbserver に関連付けられている可能性があります
- IDA インタラクティブな逆アセンブラ
- Java プラットフォーム デバッガーのアーキテクチャ
- kgdb、 Linux カーネルに統合されたデバッガ
- てんとう虫
- マックバグ
- マパトロール
- OCamlDebug 、 Objective Camlデバッガー
- オリーDbg
- PE エクスプローラー
- Prism 並列デバッガー
- 浄化する
- バスルーム
- SoftICE
- Syser 、リング 0 デバッガー
- スプリント
- T-Bug 、Perl 5 の組み込みデバッガー
- トモン
- ターボデバッガ
- ヴァルグリンド
- W32DASM
- WinDbg
- ODB: Omniscient Debugger。後方に遡ってコードをデバッグできる Java 用デバッガー。
テクニック
デバッガーによって提供されるツールは、基本的に、その言語が設計された プログラミング言語(デバッグ対象のプログラムの開発に使用される) に依存します。ただし、大多数のデバッガーは同様のツールを提供しています。
プログラムの実行を停止(一時停止)するツール
- 手動停止コマンド: プログラマはいつでも実行の停止を決定できます。
- ブレークポイント: プログラム内の特定の場所 (通常はソース コード内) に配置され、その場所に到達したときにデバッガーに実行を停止するように指示します。
- 条件付きブレークポイント: ブレークポイントと似ていますが、追加の条件が付いています (たとえば、このブレークポイントを通過する回数など)
- 観察ポイント (watch):変数の変更を条件としてプログラムの実行を停止できます。
プログラムの実行を管理するツール
- ステップバイステップ:命令ごとに実行
- ステップバイステップの概要: プログラマが要求するたびに、メインプログラムで命令が実行されます。
- 詳細なステップバイステップ: ステップバイステップの概要と同様ですが、ステップバイステップも機能に含まれています。
- タイミング付き: 定期的な間隔で、命令が実行されます (これにより、プログラムの実行速度が低下し、人間の目でプログラムを正確に追跡できるようになります)。
- 現在の関数の再起動 (ドロップ フレーム): 現在の関数の現在の実行を放棄し、現在の関数の新しい実行を開始します。
- backtrack: 前の命令に戻り、前の状態を見つけます (かなりまれな機能)

プログラムのステータスを監視するためのツール
- 変数の観察
- 記憶領域の観察
- マイクロプロセッサレジスタの観察
- コールスタックの観察 (バックトレース)
- 現在の実行ポイントでソースコードを観察する
- 現在の実行ポイントでアセンブリコード (インタープリタ言語を除く) を監視する
- トレース: プログラムの実行を停止せずに、オフラインで情報を観察できます。
さらに、デバッガーを使用すると、通常、プログラムの実行が停止したときにプログラムの状態を変更できます。
- レジスタの変更
- 変数を変更する
- メモリ領域を変更する
リモートデバッグ、クロスデバッグ
クロス デバッグ、またはクロス デバッグ は、ソフトウェアをリモートでデバッグすることで構成され、多くの場合、開発ステーションとは異なるターゲット アーキテクチャに対して行われます。
カーネルデバッガ
オペレーティング システムのカーネルまたはドライバーをデバッグするには、この特に機密性の高いタスクに適応したツールが必要です。特に、このデバッグは通常、シリアル リンク (ただし、場合によってはイーサネット) によってリモートで行われます。これは、デバッガがカーネルを完全に制御し、ターゲット マシンが使用できなくなる (ブレークポイントごとに完全にフリーズする) ためです。
たとえば、 Linuxカーネルに組み込まれている kgdb デバッガを参照してください。

