2011-12-01 10 views
0

いくつかのプロセスが(DebugActiveProcess()を呼び出して)別のプロセスをデバッグしているとしましょう。DebugBreakProcess()の呼び出し後 - イベントのdwThreadIdは何を表していますか?

他のいくつかのプロセス/スレッドは、DebugBreakProcess()を呼び出すことによってそのデバッグされたプロセスでブレークポイント例外を生成します。 デバッガはこのEXCEPTION_DEBUG_EVENT-> EXCEPTION_BREAKPOINTイベントを受信し、DEBUG_EVENT構造体ではdwThreadIdフィールドにIDが保持されます。

私の根本的な質問は - dwThreadIdの意味は? (MSDNでは「デバッグイベントが発生したスレッドの識別子」と表示されています)。

私の懸念は、次のとおりです。


  1. それ「とは、デバッグイベントが発生した」とは何を意味するのでしょうか?プロセスのすべてのスレッドが何とかこのように通知されるのではないのですか?そのプロセスは完全にブロックされていますか?通常のSEHの原因となるブレークポイント命令を呼び出し、ターゲットプロセス内のスレッドを作成によって

    DebugBreakProcess()API作品:

  2. また、私が読んstuffから、このメカニズムは次のように動作します引き継ぐメカニズム。

    これは、このdwThreadIdが実際にこの新しく作成されたスレッドのIDであり、元のプロセスのスレッドのIDではない可能性があることを意味します。私は正しいですか?

  3. デバッグされたプロセスがマルチスレッドの場合(実際にはほぼ確実です) これは、DebugBreakProcess()APIを呼び出す瞬間に「プロセッサ内にあった」スレッドのIDですか?

UPDATE:すべてこのブロックに答えました。最初の答えを見てください。


  1. 何デュアルコア・システムの場合と同じプロセスの2つのスレッドは現在並行して実行されてはどうですか?どちらが勝ち、このIDに記載されますか?それとも、2つの異なるEXCEPTION_BREAKPOINT例外が発生するのでしょうか?

ご協力いただきありがとうございます。

答えて

0

あなた自身の質問にかなり答えました。DebugBreak()というスレッドが、DebugBreakProcess()で作成された新しいスレッドです。

+0

このスレッドIDのスタックを歩くことで、予想されるスタック要素が得られたということを、どうすれば説明できますか? –

+0

このIDはDebugBreakProcess()メカニズムの一部として作成された新しいスレッドのものであることを示す信頼できる参照にリンクできますか?私は見つけることができませんでした。 –

+0

今すぐ参照が必要です。 私のシンボル解決がうまくいくところに到達した後、このdwThreadIdは作成された新しいスレッドのものであることがわかりました。ありがとう。 –

関連する問題