デバッグ中断時に処理を走らせるには?

[戻る]
はなぢ 2004/09/09(木) 18:46:16
VC++でデバッグ中に、[デバッグの中止]で中断させたときに、必ず走らせたい処理があるので
すが、プログラムの終了時処理のように、デバッグ中断で何らかの処理を必ず実行させるような
ことは可能でしょうか?

シャノン 2004/09/10(金) 09:46:55
デバッグが終了したときに、デバッグされていたプログラムで特定の処理を
行いたいのですか?
であれば、不可能な気がしますけど。

Win2000 以前の OS では、デバッグの中断=デバッグ対象プロセスの強制終了です。
強制終了ってことは要するに、終了前に一切の処理を行えません。

XP 以降の OS では、プロセスを終了させずにデバッグを中断することが可能に
なりましたが、デバッグの終了を検出するってのは不可能だと思います。

今現在、自分がデバッグされているかどうかを調べる IsDebuggerPresent っていう
関数もあり、絶えず繰り返しそれを呼んでいれば、近いタイミングで検出できるかも
しれませんが、それをどこで呼ぶかという問題が残ります。
デバッグ中は対象のスレッドは止まっていますので、IsDebuggerPresent 専用の
スレッドを立てたとしても、そのスレッドをデバッガで止められたら無意味ですし。
何より、そのような本来の目的でないところでマルチスレッドを使うのはおすすめ
できません。

WinXP 以降の OS では、別のプロセスから対象プロセスがデバッグされているかを
検出する CheckRemoteDebuggerPresent という関数もありますが…ご要望に沿える
でしょうか?

Bosscat 2004/09/10(金) 12:31:35
知見はありませんし、やろうとした事もないのですが・・・
参考になれば、、と、発想だけ。

@ Windowsはシグナルが取れる?
 取れるんなら、SIGTERM位は試してみる。
  多分無理だとは思う。

A デバッグ開始時に監視プロセスを起動する。
 デバッガが子プロセスまで追って殺さないんなら
 監視プロセスからプロセス終了を検知すれば良い。
  やり様は有ると思うけど、、コスト対効果は・・・

はなぢ 2004/09/10(金) 18:57:48
回答いただき、ありがとうございます。
デバッグ終了の検出、というのは、確実には不可能ということですね。
教えていただいた方法を参考にさせていただきます。

古いスレッドには追加発言できません。