2010-12-06 11 views
7

私はVS 2010 Professional(Windows 7 Professional 64)を使用していますが、WCF 4.0で書いています。条件が偽である間(responseMessage.StatusCodeが「OK」である)、Visual Studio 2010デバッガ - 条件が偽であっても "if"ステートメントに進む

 if (responseMessage.StatusCode == HttpStatusCode.NotFound) 
     {     
      throw new ContentNotFoundException(contentId, SSPErrorCode.PartnerRestGetStream404); 
     } 

プロセスにデバッガをアタッチ、「if」ステートメントまたはその前にブレークポイントを設定した: は、私は、次のコードを持っていますデバッガは "if"ステートメントを実行します。その後、何もせずに "throw"ステートメントを実行し、コードを続けます。

私が試した:

は、私のWindowsユーザーをログアウト、VSを再起動、再起動、洗浄液、IISをresarting、アプリケーションプールのリサイクル、それを再構築し、それを再度構築し、「もし内部でより多くのコードを追加"ステートメントと条件の内部 - これまでのところ何も働かなかった。

私はそれを取り除くためにきれいにすることができるどこかのキャッシュがなければならないが、何がどこで?

私はhttp: - social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/d4b70fd7-b74a-42ce-a538-7185df3d3254/を見つけたので、手動でブレークポイントを設定してみましたが、このクラスでは壊れませんでしたが、他のクラスでも同じことが起こりました。

私はVSを再インストールせずにこの問題を解決したいと思います。前もって感謝します!


更新

  1. 私はこれを設置し、答えを見つけることができませんでしたので、私は私のプロジェクトでの移動。
  2. 私は簡単な例で終了され、this postにジョン・マッキンタイアが報告し、この問題につまずいた:
using System; 

namespace IEnumerableBug2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (new object() == null) 
       throw new Exception(); 
      try { } catch { } 
     } 
    } 
} 

更新#2

注意を私のことメソッドにはtry-catchステートメントがあります。これは 'if'ステートメントの後の数行です。

このバグを再現しようとしましたが、失敗しました。私はそれを必要とするかもしれない他の人のためにstackoverflowに関する質問を残すつもりですが、私が書いたように、私はもはやその動作を再現することができません。

+0

IDEの真のバグのようです。それをMSに報告する。 – Martin

+0

これは、.NET 4.5を対象とするときにVisual Studio 11で修正されているようです。ただし、.NET 4.0を対象としている場合、このバグは存続します。 –

+0

私にお知らせいただきありがとうございます。 –

答えて

0

実際には見知らぬことが起こっていますが、私はこれがデバッガのバグか、悪い悪いVSインストールであることを非常に疑っています。

私はあなたが正しく相互作用していないことが起こっているはずです。デバッグウォッチウィンドウに "responseMessage.StatusCode == HttpStatusCode.NotFound"という式を入れましたか?それは何を返すのですか?ステータスコードが毎回異なる値を返す可能性はありますか?それが一貫していることを確認するために数回評価してみましたか?

私は、コードが変更された場合、バージョンが一致しないにもかかわらずソースファイルをデバッグするかどうかを尋ねるメッセージが表示された場合は、「はい」と答えています。これは何もせずに "スロー"ラインをスキップできる理由を説明します。あなたが見ている実際のコードをデバッグするのではなく、古いバージョンです。これを修正するには、すべてを再構築し、バージョンの不一致があってもデバッグしたい場合は、「はい」と答えてください。

+0

お返事ありがとうございます。オマーそれはそうではないと申し訳なく思っています。私はリターンコードの値をチェックして、何回も行っているだけでなく、条件自体が「偽」を返していることを確認しました。 はい、その理由は、コードの最後のバージョンではない、デバッグ中のコードのキャッシュであるという大きな可能性があります。しかし、自分自身で書いたように、私はソリューションをきれいにして再構築し、 IISとマシンそのもの。 私はまた、私の同僚のいくつかと私の上司にこの奇妙な動作を示し、彼らは自分自身を試してチェックしたので、私はそれを夢見ていることはできません... –

+0

Ifステートメントに新しいブレークポイントを設定すると、またはthrow文では、コードエディタの余白にあるブレークポイントアイコンが完全に赤く表示されるのか、それとも赤い丸で表示されないのですか?それが完全に赤でない場合は、すべてを再構築した直後に、[モジュール]ウィンドウを開き、アプリケーションがDLLをロードしたパスを見つけます。エクスプローラでそのパスに移動し、DLLが "今すぐ"作成されたことを確認してください。 –

+0

また、ifの直前にMessageBox.Show( "1")、ifの中にMessageBox.Show( "2")、ifの直後にMessageBox.Show( "3")を配置すると、 3つのメッセージボックスのうちのどれかが表示されますか? –

3

この問題も発生していますが、少し異なります。 は、ここに私のコードです:

 string lockCode = Guid.NewGuid().ToString(); 
     bool alreadyLocked = string.IsNullOrWhiteSpace(lockCode); 

     if (alreadyLocked) { 
      throw new Exception("already running"); 
     } 

     try { 
      PerformTask(task); 
     } 
     finally { 
      UnlockTask(task, lockCode); 
     } 

あなたが見ることができるように、lockCode文字列は常にGUID値が割り当てられています。デバッガは 'if'スコープに入りますが、そうではありません。例外はスローされません。

Windows 7 64ビット版ReSharper 6.0でVisual Studio 2010 SP1を実行しています。

Microsoft Visual Studio 2010 
Version 10.0.40219.1 SP1Rel 
Microsoft .NET Framework 
Version 4.0.30319 SP1Rel 
Installed Version: Premium 

これは、フレームワーク4.0のASP.NETアプリケーションで発生します。 私はマシン上の別のプロジェクトにここに掲示した再現コードを実行しようとしましたが、問題を再現できませんでした。

また、私はこのパス上の.NET Frameworkのシャドウコピーキャッシュを削除した:

C:\Users\username\AppData\Local\assembly 

私はVS2010シンボルキャッシュディレクトリを削除し、一時的なASP.NETファイル。 私はコンピュータを再起動し、ソリューション全体をきれいにしてすべてを再構築しました。 これがなぜ起こるのかの手がかりがありません。

回避方法:メソッドから 'try-finally'部分を削除するか、別のメソッドにthrow文を抽出すると、デバッガは 'if'スコープを正しく処理します。

本当の解決策を投稿してくれて申し訳ありませんが、問題の原因を特定したり回避したりするのに役立ちます。

+0

ありがとう! 少なくとも、あなたは回避策を見つけました。 –

1

今日この問題も発生しました。次のコードでは、リリースビルドで回避策をコンパイルしないという利点があり、問題を解決しています。

using System; 

namespace IEnumerableBug2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (new object() == null) 
       throw new Exception(); 

      #if DEBUG 
      bool workaround = true; // dummy instruction 
      #endif 

      try { } catch { } 
     } 
    } 
} 
関連する問題