1. ホーム
  2. debugging

[解決済み] デバッガとはどのようなものですか?

2022-04-25 15:30:14

質問

デバッガはどのように機能するのでしょうか?特に、すでに実行されている実行ファイルに「アタッチ」できるものは。コンパイラがコードを機械語に変換することは理解できますが、では、デバッガはどのようにして添付されているものを「知る」のでしょうか?

解決方法は?

デバッガの動作の詳細は、デバッグの対象やOSによって異なります。Windows でのネイティブデバッグについては、MSDN でいくつかの詳細を確認できます。 Win32 デバッグAPI .

ユーザーはデバッガーに、どのプロセスにアタッチするかを、名前またはプロセス ID で指示します。名前の場合、デバッガーはプロセス ID を検索し、システムコールを介してデバッグセッションを開始します。 デバッグアクティブプロセス .

しかし、ウィンドウシステムから来るイベントの代わりに、OS はデバッグ対象のプロセスで発生するイベント (例えば例外発生) に基づいてイベントを生成します。例えば、例外の発生などです。 デバッグイベント待ち .

デバッガはOSが提供するAPIを通じて、ターゲットプロセスの仮想メモリの読み書きや、レジスタの値の調整まで行うことができます。の一覧を参照してください。 デバッギング関数 Windowsの場合。

デバッガは、シンボルファイルの情報を利用して、アドレスから変数名やソースコードの位置への変換を行うことができます。シンボルファイルの情報は、別のAPIセットであり、OSの中核部分として存在するわけではありません。Windowsでは、これは デバッグインターフェースアクセスSDK .

マネージド環境(.NET、Javaなど)をデバッグする場合、プロセスは一般的に似ていますが、基盤となるOSではなく、仮想マシン環境がデバッグAPIを提供するため、詳細は異なっています。