デバッグ中断時に処理を走らせるには? – プログラミング – Home

デバッグ中断時に処理を走らせるには?
 
通知
すべてクリア

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


はなぢ
 はなぢ
(@はなぢ)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

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


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

デバッグが終了したときに、デバッグされていたプログラムで特定の処理を
行いたいのですか?
であれば、不可能な気がしますけど。

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

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

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

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


返信引用
Bosscat
 Bosscat
(@Bosscat)
ゲスト
結合: 24年前
投稿: 73
 

知見はありませんし、やろうとした事もないのですが・・・
参考になれば、、と、発想だけ。

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

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


返信引用
はなぢ
 はなぢ
(@はなぢ)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

回答いただき、ありがとうございます。
デバッグ終了の検出、というのは、確実には不可能ということですね。
教えていただいた方法を参考にさせていただきます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました