1

開発用 PC でアプリが長いループまたは無限ループに入ると、VS デバッガーで中断し、アプリが何をしているかを教えてくれます。デバッグを支援するために、ユーザーの PC でも簡単な方法でそれを行いたいと考えています。

私は次のようなことを考えていました:

  • アプリで、ある種のプロセス間パイプを待機する別のスレッドを実行し、そこから何かを受信すると、メイン スレッドの現在のスタック トレースをログに記録します。(Thread.GetCompressedStack() を使用していますか?)
  • break.exeたとえば、実行時に他のプロセスに接続し、パイプに何かを書き込むヘルパー exe を送信します。

その後、ユーザーがアプリのフリーズを報告した場合、break.exe を実行してみるように伝えます。

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

4

2 に答える 2

1

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

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

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

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

于 2012-04-30T14:08:33.980 に答える
0

Debug.WriteLineデバッグ情報の出力に使用できます。デバッグ出力のテキストは、Sysinternals のDbgViewなどでキャッチできます。

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

于 2012-04-30T14:10:25.060 に答える