2

デバッガーの実行中に UI がブロックされる .NET Forms アプリケーションの問題を診断するのは困難です。

ブロックはランダムであり、ブロックされている間、デバッガー内の一時停止ボタンをクリックすると、ブロックが解放されるまで一時停止が実際には完了しません。

デバッガーの外部でプログラムを実行するだけで試してみましたが、ブロックされず、正常に実行されます。

プロファイラー (アリ) を使用してブロックを見つけようとしましたが、この状態ではどちらもブロックされず、プロファイラー レポートには注目すべきものは何も表示されません。

アプリケーションには、ソケット接続のタイムアウトを処理するためにバックグラウンド スレッドが実行されています (Threading.Timer では、これらは UI と通信しません)。

ネットワーク操作はBeginXXX呼び出しを使用しています。

ユーザーには発生しないため、この問題を見つけようとして困惑していますが、これらのブロックが発生しているように見える間、プログラムの他の側面をデバッグしようとすると困難になります。

POSTerminalUI の主な焦点は、UI スレッドの State オブジェクト ( ) から接続状態を取得したマシンのグリッドを表示するユーザー コントロールです。

Debugger/UI ブロッキング間の接続を見つけるために調べることができるものはありますか?

4

3 に答える 3

1

私は最終的にこれを追跡しました。何が起こっていたのかというと、メインフォームに戻ってきたイベントを発生させる複数のスレッドです。

フォームでは、をチェックしてInvokeRequiredから、BeginInvokeこのイベントをメインフォームスレッドに戻していました。問題は、何千ものイベントを発生させるイベント発生にバグがあり、フォームのチェックにロックがあるそれぞれが呼び出されていたことでした。したがって、プログラム(およびデバッガー)がフリーズします。

デバッガーがフリーズするとは思っていませんでしたが、デバッガーの一時停止/停止を押す前に、すべてのロック/呼び出しが処理されるまでフリーズしました。

于 2012-05-22T00:31:56.980 に答える
1

これは大変なことです。このシリーズのビデオは、何が起こっているのかを診断するためのいくつかのアイデアを提供できると思います。

http://channel9.msdn.com/Series/-NET-Debugging-Stater-Kit-for-the-Production-Environment/Diagnosing-Application-Issues-01

于 2012-05-15T03:18:38.863 に答える
0

VS Debug->Windows->Threads ウィンドウでチェックしてみましたか? そこでは、スレッドの状態を確認できるだけでなく、その特定のスレッドで一時停止するために「スレッドに切り替える」ことができるはずです。

于 2012-05-15T08:58:01.237 に答える