DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WPF で プロセスアタッチデバッグでDebugBreak が使いたいけど動かない

環境/言語:[WPF VB.NET2010 ]
分類:[.NET]

こんにちは。
WPF VB.NET2010で開発しています。

チームで開発しているのですが
あるExe(A.exe)から別Exe(B.exe)が起動されています。
私は、B.exeの一部を開発しています。

B.exe単独ではDB接続などの都合で動かない仕様になっていまして

いつも、デバッグ実行するために
A.exe起動、操作、B.exe起動、
VisualStudioで「プロセスにアタッチ」
して、B.exeをデバッグトレース実行するようにしています。

ですが、毎度毎度のことなのでかなり手間です。
プロセスにアタッチの部分を楽にできないかと思っています。

ネットを検索していると、どうやら、
ソース中に DebugBreak() をいれると、できる、
と出てくるのですが、

実際、やろうとしてみても、思うようには動いてくれません。

単純なサンプルでテストするために
このようにしています。

Declare Sub DebugBreak Lib "kernel32" ()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

  MsgBox("TEST")

  DebugBreak()

  MsgBox("TEST")

End Class


この場合、生成されたexeを起動すると
メッセージ後に次のようなエラーメッセージが出て、
その後、そのまま終了してしまいます。

---------------------------
MainWindow: WpfApplication2.exe - 例外
---------------------------
ブレークポイント ブレークポイントに到達しました。 
---------------------------
OK   
---------------------------

これは、何かほかに設定やIDE起動などする必要があるのでしょうか?

それとも、WPFでは DebugBreak() は対応していないのでしょうか?
よろしくお願いします。

DebugBreakなどとは違う方法で、プロセスアタッチの面倒さ
(つまり、いちいちプロセス一覧からいつものプロセスを選択しないといけない)
を、軽減するような方法をご存知の方、よろしければ教えてください。

よろしくお願いします。
2011/12/17(Sat) 00:23:23 編集(投稿者)

DebugBreak()、.NET 的には Debugger.Break() はそのメッセージが出て止まる状態にするためのものです。
開発環境を正しく設定できていれば、止まった(不正に落ちた)タイミングでデバッガーを起動するボタン、あるいは選択肢が出てきます。
ここからデバッガーを割り当てることで、プロセスのアタッチ忘れを防ぐ、あるいはプロセス起動直後からデバッグしたいというノウハウです。

あくまで、タイミングを与えるだけであり、自動でアタッチしてくれるわけではありません。

たまにこの手の話題を見かけますが、Debugger.Break 以上のよいノウハウがでている事例に覚えはないかなぁ…。


# 理想を言うなら、B.EXE は単独でテスト可能なように設計すべき。
# それができていないからこそ、今の不便を強いることになったわけです。
# 今更の話ですが…。
■No29506に返信(Azuleanさんの記事)
> 2011/12/17(Sat) 00:23:23 編集(投稿者)
>
> DebugBreak()、.NET 的には Debugger.Break() はそのメッセージが出て止まる状態にするためのものです。
> 開発環境を正しく設定できていれば、止まった(不正に落ちた)タイミングでデバッガーを起動するボタン、あるいは選択肢が出てきます。
> ここからデバッガーを割り当てることで、プロセスのアタッチ忘れを防ぐ、あるいはプロセス起動直後からデバッグしたいというノウハウです。
> あくまで、タイミングを与えるだけであり、自動でアタッチしてくれるわけではありません。
> たまにこの手の話題を見かけますが、Debugger.Break 以上のよいノウハウがでている事例に覚えはないかなぁ…。

よくわかりました。
現在のプロジェクトでは、デバッグビルド時にはMessageBoxで起動を止めていて
そのときにアタッチするのですが、それと似たようなものなのですね。

この件については、これ以上深入りしてもできなさそうなので、あきらめておきます。

> # 理想を言うなら、B.EXE は単独でテスト可能なように設計すべき。
> # それができていないからこそ、今の不便を強いることになったわけです。
> # 今更の話ですが…。

そこが今更というか、私と違う方々がはるか以前から作っておりますので...
手がでないんすよ。もはやだれが作ったのかも正確にはわからない。

せめてB.exeを起動するときにコマンドラインで情報伝達してくれれば
IDEからの起動するのもできるのですが、
メモリマップドファイルか何かのプロセスメモリ共有を使って起動しているらしく
B.exe単独ではどうやっても動かないのです。

疑問が晴れました。ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板