ここ数日、最適な室温のおかげなのか要因は不明なのですが、開発作業時の集中力がいつもよりも高いような気がします。

そこで、なかなか手を出せなかった機能の一つ。デバッガのアタッチ機能に取り組んでみます。

デバッグを行う上で、プロシージャ階層やスレッド情報を実行側が管理しておく必要があるのですが(だからデバッグコンパイルとリリースコンパイルがあるのです)、アタッチ前の状態ではデバッガとの意思疎通が取れない状態になっています。

そんなこともあって、VC++などはどうやってアタッチ前の情報を仕入れているのかなと。。。不思議に思ってはいたのですが…。

どうやらアタッチを行った瞬間に、それまでのデバッガに流れるべき実行状態が垂れ流しで送られてくるようです。タネも仕掛けもありませんでした(ある意味ホッ

通常、デバッガは下記の2つのいずれかの方法でターゲットアプリのデバッグを開始します。

  • CreateProcessで起動(DEBUG_PROCESS または DEBUG_ONLY_THIS_PROCESS を使用)
  • DebugActiveProcess

後者の方法をとればアタッチを行えるので、そのようなコードを書いていきます。何気に、DebugActiveProcessでアタッチを行った直後に流れてくるDLLのロードイベントでは、通常の方法ではDLL名を取得できないようなので、モジュールアドレスからGetModuleFileNameExで取得することにします。

こんな感じで、実験段階ではアタッチが成功しているので、実用段階までインターフェイスを煮詰めていきたいと思います。

これで、ABでのデバッギングも少しはラクになるかな〜なるといいな〜