2009-10-22 12 views
11

私は誰も私を信じないと思っていたので、私はセッションを記録したので、奇妙な問題が発生しました。Visual Studio 2008のステートメントが奇妙な場合

非常に基本的なレベルにあると思われるバグを見つけました。これは単一スレッドのアプリケーションであり、すべての処理がブール値を評価しています。

真偽値はfalseですが、if文は真であるかのように実行されます。あなたは私が何を意味するか見るでしょう。私は解決策をきれいにして何度も再構築しました。何が起こっているのか分かりません。

私はいくつかの説明をお願いします。

http://www.youtube.com/watch?v=ope9kxEyt4g

+0

+1です。 – GenericTypeTea

+0

どのバージョンのVS?最新のサービスパックを適用していますか? –

+0

VS2008 +最新サービスパック –

答えて

6

私の推測では、奇数何かが展開で起こっていることなので、PDBは、実際のコードと同期していません。デバッガの代わりにロギングを使用して何が起こっているのかを確認すると、より賢明な動作が表示されると思われます。私はCLR自体が "if"という奇妙な振る舞いで動作するのではないかと疑う。デバッガ/ランタイムの不一致の可能性がはるかに高い。

+0

私は自分自身でbinフォルダをクリアしました。私たちは新鮮なビルドについて話しています。私は何が起こっているかを見るためにデバッグステートメントを入れる考えが好きです。私はこれを試してみる。ありがとうジョン。 –

+0

その2番目。私がアップグレードしているASP.NETアプリケーションをデバッグすると、デバッガが少しスローされることがあります。最も単純な例は、あるコードをメソッドに挿入し、デバッグを開始し、それらの行が決して実行されないことを確認するときです。または、デバッガが1行をハイライト表示するが、実際には次の行を実行するとき。 obj /とbin/folderを削除すると、いつでも私に役立ちます。 – Audrius

0

これは、デバッグのステップ範囲がちょうどオフの場合のように思えます。デバッガで黄色のハイライトを常に信用できるとは限りません。あなたは実際に踏み込んでいるわけではありません。F#の以前のBetasでは、黄色のハイライトが狂ったように飛び回るこのようなバグがたくさんありました。デバッガの強調表示は、コンパイラがコンパイルした一連の命令に対応する「ソース範囲」としてコンパイラが.pdbファイルに書き込むものの大部分を占めています。

これはどのバージョンのVS/C#ですか?

EDIT 確かに、おそらく、.pdbファイルが.dllと同期していない可能性があります。

+0

私は月曜日に仕事に戻るときに、objファイルと他のすべての一時ファイルと生成ファイルをクリアしようとします。私はあなたのすべてを投稿し続けます。 –

+0

私は.NETフレームワーク3.5とVS2008を使用しています –

8

私は過去に何度もそれを見ました。基本的には、デバッグしているコードが、見ているコードと一致していないということです。

私はこれを引き起こしているのか分かりませんし、解法はカーゴカルトのガイドラインに従っています。 Visual Studioの

  • のすべてのコピーがあなたのビンのすべてを削除し、
  • があなたのビンのすべてを削除し、このプロジェクトのためのフォルダをオブジェクトとすべての.NETプロジェクトのためのフォルダとオブジェクトを閉じる

    • すべてのファイルを削除しますよ"C:¥WINDOWS¥Microsoft.NET¥Framework¥v2.0.50727¥Temporary ASP.NET Files"にある
  • +19

    ヤギを犠牲にすることを忘れないでください(良い尺度のために)! –

    +0

    binフォルダ内のすべてのファイルを削除しました。objと一時的なaspファイルは完全に忘れてしまいました。そのショットを与えるだろう。私はまだ偽のハードコーディングが望ましい結果を生成する理由、またはなぜelse文を入れて問題を解決するのか理解できません。 –

    +0

    申し訳ありませんが私はあなたの答えを投票しなければならなかったが、それでも問題を解決していないすべてのことを行うことが判明。すべてのbinフォルダ、Objフォルダ、すべての一時的なaspファイル(x86とx64)を削除しましたが、それでも同じ問題があります。 –

    0

    私はまったく同じ問題を週前に持っていました。また、VS2008、最新のSPを持っている。 WinFormsアプリケーション。値はfalseですが、常にifボディが実行されました。あなたのビデオと同じ調査をしていました。ここに私のコードがあります:

    if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion)) 
        throw new SimulationFormatException(ws, ss); 
    

    「リリース」としてコンパイルされたデバッガなしで実行しても問題ありません。それを試してみてください。

    VS2008デバッガにバグがあるとします。どういうわけか 'if'と 'throw'キーワードで再現可能です。

    EDIT:上記の '実行された'という言葉はもちろん間違っています。代わりに「ステップされているが実行されていない」を使用する必要があります。

    +1

    ifブロックが実際に実行されたのですか、それともデバッガによってハイライトされただけでしたか? Vinceのビデオでは、コードは実行されていないようです(例外オブジェクトeはnullです)。 –

    +0

    ビデオのように実行されません。 –

    3

    Delphiでこれまでと同じようなケースが見られました。私の質問は次のとおりです。リリースまたはデバッグのために最適化の有無にかかわらずコンパイルしていますか?

    私が尋ねるのは、デバッグセッション中に、デバッガによれば、逆の実行をしているような4-5行のコードで構成された小さな手順を発見したからです。

    は基本的に、次のコードタイプで:理由はラインは副作用がなかったということであった

    procedure Test; 
    begin    start -+ 
        Line1;    |        +-> here -+ 
        Line2;    |     +-> here -+   | 
        Line3;    |   +-> here -+     | 
        line4;    +-> here -+        | 
    end;                +-> end 
    

    procedure Test; 
    begin 
        Line1; 
        Line2; 
        Line3; 
        line4; 
    end; 
    

    実行順序、デバッガによれば、このましたコンパイラはコードを書き換えてコードを「最適化」し、コードを逆順に完全に実行するように並べ替えます。

    実際には実行されているスロー・ステートメントがありますが、コンパイラはこれを問題のあるものとして表示します。なぜなら、コードを再配置するために、2つのスロー・ステートメントは実際は実行可能コードとして一度発行されますか?

    メモ:私はこれがVisual Studioのやり方であることを知っている理由はありませんが、あなたのビデオを見るときに私の頭に浮かんだことでした。

    0

    コードのファンキーな強調表示に「me too」を追加するだけです。私はVS2008をC#で動かしています。私は別のプロジェクトでクラスライブラリを参照しているWindowsフォームプロジェクトを持っており、私はラインごとにデバッグしています。 「ある時点で」デバッグ中の黄色いハイライトは、実行されている実際の行から14〜20行離れていました。

    私はVSを閉じて両方のプロジェクトのディレクトリを開き、bin/Debugとobj/Debugの両方を両方のディレクトリで削除してからVSを再起動しました。再コンパイルとデバッグをステップ実行すると、すべてが正常だった。

    問題が.manifest、.pdb、またはおそらく.Cacheファイルにあるかどうかわかりません。それは問題ではありません。すべて吹き飛ばすとうまくいくでしょう。

    FWIWでは、このSOスレッドを返す以外は、グーグルがほとんど役に立たなかった。他のすべてのヒットは、VC++テンプレートとVS2005の問題に関するもので、SPがこの問題を修正しました。これは同じ問題ではありません。

    +0

    私はこの問題をあきらめました。私はすべてを試しました、私はすべてのDLLをTemporaryインターネットファイル、Binのすべてのローカルファイルからクリアし、ソリューションを別のPCに移動しました。問題はデバッガにあるように見えますが、その理由はわかりません。 –

    関連する問題