1

私は非常に奇妙な状況にあります。過去6年間に10人以上の異なる開発者によって開発された比較的大きなアプリ(約50万行のコード)があります。最新のリリースまでは正常に機能していました。最新のビルドでは、散発的にぶら下がっていると不満を言う複数の顧客がいて、その方法/理由を理解するのにかなりの時間がかかっています!デバッグが困難になる原因のいくつかを次に示します。

  • 今朝まで、この問題を社内で再現することはまったくできませんでした。
  • デバッガーが接続されているときにこれが発生するのを見たことがありません。これは明らかに解決を困難にします。
  • これは、ユーザーがアプリを使用しているときではなく、しばらく使用を停止した後に発生する傾向があります。
  • これは(多分)スクリーンセーバーが登場することに関係しているのでしょうか?
  • 画面の解像度を変更すると、ある程度一貫して発生するようです

今朝、私たちはついに、社内で少なくとも1つのシナリオを再現する方法を理解しました。-デバッガーの外部でそのアプリを実行する-画面の解像度を変更する。これによりアプリがハングします。-次に、デバッガーを使用してアタッチできます。

ただし、問題は(少なくとも1つのケースで再現できるようになったため)、コードがハングしたときにコードが実行されないことです。つまり、ハングしたときに実行されているスレッドは1つだけであり、スレッドが中断する行はApplication.Run(form)です。program.csから。

最後のポイントは、アプリケーションが完全にハングしていないことです。具体的には:-それでもスクリーンペイントを行います(たとえば、他のアプリでカバーされている画面の一部を更新します)-表示されているUI要素をクリックすることはできませんが、期待どおりに「ビープ音」を鳴らしません完全に応答しなくなった場合-デバッガーを接続した後にアプリケーションを「一時停止」すると、一時停止中に最小化/最大化できます。そうしないと、最小化/最大化コマンドに応答しません。-ビープ音が鳴らないことを除けば、画面外にモーダルウィンドウが表示されていないかのように動作します。追加(前述のとおり)、アプリを一時停止すると、Application.Run行で一時停止します。メインウィンドウをブロックするモーダルダイアログボックス。

振る舞いは最も奇妙な私見です-特にそれが最近起こり始めたばかりなので。次のステップは、原因が見つかるまでコードの「減算」セクションを開始する必要がありますが、最初に問題をここに投げて、他の誰かがこれまでにこのようなことを経験したことがないかどうかを確認します。

事前にご指導いただきありがとうございます。ご提案をお待ちしております。

ej

編集:行動を述べる別の方法。「ハング」した後は、マウスとキーボードからメッセージを受信しないことを除いて、問題がないかのように動作します。つまり、それ自体が再描画され、VS2010デバッガーによって一時停止できますが、マウス/キーボードイベントに何らかの形や形式で応答することはありません。ここでも、本当に死んでいる他のアプリのように、私にビープ音を鳴らし始めません。同様に、タスクマネージャで応答がないことは表示されません。「もうI/Oを聞いてない、ごめんなさい!」という奇妙な感じです。状態...奇妙な!

編集:

前回の編集で、IOを受け入れなくなったと述べました。これは私にそう考えさせました、私はそれが「ハング」した後もそれがまだ応答するかどうかを確認するためにTcpListenerを追加しました-そしてそれはそうします。さらに、それでも画面が更新されるという事実を考えると、ペイントイベントにブレークポイントを設定し、いくつかの(より)奇妙な動作をしました。ペイントイベントのブレークポイントに到達しますが、その時点ではコールスタックの最上位にはありません。コールスタックの上部には、「スリープ中、待機中、または参加中」と表示されます。次に、paintの行が次にあり、次に外部コード、次にmainです。したがって、画面で強調表示されている線は、黄色ではなく緑色です。さらに、I F10(ステップオーバー)の場合、正確に1行下に移動しますが、それでも、painメソッドはコールスタックの最上位にはありません。この時点で、他のスレッドは実行されておらず、他のコードは実行されていません。他に何も起こらない?!?!ここで何が起こっているのですか?

最後のポイント-TcpListenerのAcceptSocketイベントにブレークポイントを設定し、TCP / IPポートに接続すると、そのコードでブレークし、そのコードはコールスタックの最上位にあります。

申し訳ありませんが、私はまだかなり混乱しています。

4

1 に答える 1

4

UI以外のスレッドで作成されたコントロール(またはそのハンドル)に問題がある可能性があります。この質問を確認してください

于 2012-07-24T16:19:34.970 に答える