web-dev-qa-db-ja.com

デバッグ中、変数は現在のコンテキストに存在しません

2つの一時変数を挿入し、それらの値を確認したいのですが、できません。別の場所に配置することで解決できますが、この動作が存在する理由に興味があります。

   public float Value
    {
        get
        {
            float result = Memory.ReadFloat(Address);

            double Radian = Math.Round(result, 2); // **BREAK POINT HERE**
            double Degree = Math.Round(Math.Round((double)(result * 180 / Math.PI)), 2); // **BREAK POINT HERE**

            return result; // **BREAK POINT HERE**
        }
    }

3つすべてのポイントを破りますが、Visual Studio 2012で値を表示できません。結果のみがローカルウィンドウに表示され、RadianまたはDegreeという変数はありません。

たとえば、ラジアン変数の監視を追加すると、赤い十字アイコンが付いた次のメッセージが表示されます。

ラジアン-「ラジアン」という名前は現在のコンテキストに存在しません

26
Dominik Antal

ローカル変数がJITコンパイラーによって最適化されている可能性があります。 Visual Studioを使用しているため、構成をデバッグに切り替えて再構築できる場合があります。

そうでない場合は、最適化を無効にして追跡情報を生成するようにJITコンパイラーを構成できます- 構成の設定方法についてはこちら を参照してください。これにより、デバッガーをプロセスにアタッチするときにローカル変数を表示できるようになります。

60
Lee

VS2012で、デバッグモード中に変数が「消える」別のシナリオに遭遇しました。

これがないことを確認してください:

if(false)
   {
   .
   }
else
   {
   //Code here will be optimized and variables will not be available.
   }
20
ishayle

リリースビルド(デバッグモードではなくリリースモード)でデバッグしようとすると、このエラーが発生します。ソリューション構成をデバッグ(任意のCPU)に変更すると、イミディエイトウィンドウに変数値が表示されます。

7
Chewdoggie

ソリューション構成をデバッグ(任意のCPU)に変更しましたが、それは問題ではありませんでした。 Visual Studio 2017にアップグレードした後、デバッグ中であると思いましたが、もう1つの単純な(しかし重要な)ステップがありました。 (そして、ほとんどの人にとってそれはおそらく明白ですが、私はそれを逃しました。)「ソリューション構成」が「デバッグ」に設定されている場合は、「デバッグ」の横にある下矢印をクリックし、「構成マネージャー」を選択してから、対応するポップアップウィンドウの[構成]はまだ[リリース]に設定されていました。これを[デバッグ]に変更して[閉じる]ボタンをクリックする必要がありました。そこから再実行すると、デバッグ中にすべての変数を表示できました。

0
Crazy Cat

私は.NET標準プロジェクトを持っていて、私のために働いたのは行くことでした:

  • プロジェクトのプロパティ。
  • [ビルド]タブ。
  • 詳細ボタン(右下のすべての方法)。
  • 「デバッグ情報」オプションを完全に変更します。
  • List item

「ポータブル」に設定されていました。 「フル」に変更すると、ウォッチウィンドウとイミディエイトウィンドウに変数が再び表示されるようになりました。

それが適切かどうかはわかりませんが、最近プロジェクトをPCLから.NET Standardに変換しました。翻訳で何かが失われたのかもしれません。

0
NightShovel