2012-04-30 13 views
1

私のアプリケーションがdev PCに長くて無限ループすると、VSデバッガで壊れてしまいます。私はユーザーPC上で簡単にこれを行い、デバッグに役立てたいと思っています。プロセス間のパイプのいくつかの並べ替えに待つ別のスレッドを実行して、アプリでは.NETマシンの実行可能ファイルがループしている場所を参照してください。

  • 、そして、そこから何かを受信すると、メインスレッドの現在のスタックトレースをログに記録します。

    私はこのような何かを考えていました。 (Thread.GetCompressedStack()を使用していますか?)

  • break.exeは、実行時に他のプロセスに接続し、パイプに何かを書き込みます。

ユーザーがアプリのフリーズを報告した場合、私はそれらにbreak.exeを実行するように指示できます。

これは良いアプローチですか?

+0

ここのリンクは役に立つかもしれません:http://blogs.msdn.com/b/jmstall/archive/2005/11/28/snapshot.aspx。可能であれば、あなたのプロセスに新しい通信パイプを追加することは避けたい。 –

答えて

1

あなたにはいくつかのオプションがあります。

  • タスクマネージャでは、実行中のプロセスのダンプを作成できます。ダンプはあなたの開発マシンで調べることができます。ダンプをデバッガにロードすることで、すべてのスレッドのスタックを調べることができます(WinDbg/SOSを使用することをお勧めします)。このオプションでは、ユーザーマシンに追加のインストールは必要ありません。

  • Process Explorer実行中のプロセスのスレッドを検査できます。繰り返しループがある場合は、スタックを見て検出することができます。

  • WinDbg(SOSはフレームワークの一部です)は、xcopyをユーザーマシンに展開できます。プロセスにアタッチして、プロセスメモリのダンプを調べたりダンプしたりすることができます。

0

デバッグ情報の出力にはDebug.WriteLineを使用できます。デバッグ出力のテキストは、例えば以下のように捕捉することができる。 Sysinternals 'DbgView

また、ユーザーの特別なデバッグビルドを作成することもできます。これにより、必要なすべての情報がユーザーの%APPDATA%のファイルにダンプされます。

関連する問題