web-dev-qa-db-ja.com

Visual Studio 2010の「現在のメソッドのコードが最適化されているため、式を評価できません」

デバッグモードでVisual Studio 2010を使用していますが、「コードの最適化」のチェックを外しています。デバッガーで変数をすばやく監視(またはホバー)することはできません。 「現在のメソッドのコードが最適化されているため、式を評価できません」というエラーが表示されます。

Int i = -3のような行でさえ、iを簡単に監視すると、「ローカルまたは引数 'i'の値を取得できません。この命令ポインターでは使用できないため、おそらく最適化されているためです。」

この link 同様の質問で参照されているものは当てはまらないようです。

不足している設定はありますか?

141
Tony_Henrich

プロジェクトがデバッグモードにある間、ソリューションはそうではありませんでした。私がそれを変更したとき、それは働いた。

159
Tony_Henrich

VS 2010を使用していたときにこの問題が発生しました。ソリューション構成で(デバッグ)が選択されています。これを解決するには、プロジェクトプロパティの[コードの最適化]プロパティをオフにします。プロジェクト(右クリック)=>プロパティ=>ビルド(タブ)=>最適化コードのチェックを外します

46
Vin

最適化されたボックスがチェックされていないにもかかわらず、最適化された/リリースビルドをデバッグしているようです。あなたが試すことができるものは次のとおりです。

  • ソリューションファイルを完全に再構築します(ソリューションを右クリックして[すべて再構築]を選択します)。
  • デバッグ中にモジュールウィンドウを開き([デバッグ]-> [ウィンドウ]-> [モジュール])、ロードされたモジュールのリストでアセンブリを見つけます。ロードされたアセンブリに対してリストされているパスが予想どおりであること、およびファイルの変更タイムスタンプがアセンブリが実際に再構築されたことを示していることを確認します。
  • モジュールウィンドウには、ロードされたモジュールが最適化されているかどうかも表示されます。最適化されていないことをモジュールウィンドウに表示してください。

[デバッグ]-> [Windows]メニューに[モジュール]メニュー項目が表示されない場合は、[カスタマイズ...]メニューに追加する必要があります。

28
Justin

VS2013で、[ツール]-> [オプション]-> [デバッグ]-> [全般]に移動し、[管理互換モードを使用]を有効にします。これにより、新しい関数評価動作が無効になります。

14
Jesse

デバッグモードで実行してみてください。リリースモードで実行している場合は、このメッセージが表示されます。

9
thejustv

私の状況は、上記の回答のいずれにも当てはまりませんでした。私は次を見つけました: MSDN記事 いくつかのプリミティブなネイティブスレッド操作でスタックすると、デバッガーがデータにアクセスできないことを説明するスレッドについて。例として、スレッドがTask.Wait()に座っているとき、これが起こります。

6
Alan Baljeu

同じ問題がありました。しかし、私の場合、Debuggable属性はプロジェクトのAssemblyInfo.csファイルにハードコーディングされているため、コンパイルによって(上書き)書き込まれません。 Debuggable属性を指定する行を削除した後に機能しました。

6
riQQ

VS2008でも同じ問題が発生しました。私の場合は、solution-rebuildで解決しました。

5
Ingmar

他にできることの1つは、最適化されているが拡張子がiniのdllと同じ名前のファイルを作成し、それに以下を追加することです。

[.NET Frameworkのデバッグコントロール]
GenerateTrackingInfo = 1
AllowOptimize = 0

これにより、JITは変数を最適化しないようになります。

まだpdbが必要なことに注意してください。したがって、次のような結果になります。yourDll.dll yourDll.pdb yourDll.ini

これは、デバッグオプションを使用してdllを再生成するアクセス権がないシナリオで特にうまく機能します。

http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx

4
Bongo Sharp

言及した@Kragenとは別に、Webプロジェクトをデバッグする場合

visual Studioを閉じて、C:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Filesにある一時ファイルを削除してください。

4
testuser

現在のメソッドのコードが最適化されているため、式を評価できません。」メッセージが表示されたら、Debugger.Break()ステートメントの発行後にF10を押して次のステートメントに進みます。

次のステートメントに進み、デバッグビルドを実行していると仮定すると、このメッセージは消えます。

4

テストベッドWebアプリからクラスライブラリをデバッグしているときにも同じ問題が発生しました。私はテストベッドでリリースバージョンを参照していましたが、それはクラスライブラリプロパティで最適化されるように設定されていました。

クラスライブラリプロパティのリリースバージョンのコードの最適化チェックボックスをオフにすると、作成中に問題が解決しました。

3
tekiegirl

これは後の答えだと思いますが、将来、他の人を助けるかもしれないこの問題に対処する方法への別の参照を見つけました。この Webページ は、最適化を妨げる環境変数(COMPLUS_ZapDisable = 1)の設定について説明しています。少なくとも私にとってはそうでした! (Visual Studioホスティングプロセスを無効にすることの2番目の部分を忘れないでください。)私の場合、外部DLLをシンボルサーバーを介してデバッグしていたので、これはさらに関連性があったかもしれませんが、わからない。

3
Michael Bray

「コードの最適化」プロパティがチェックされていない問題については、コードは最適化されたままコンパイルされます:すべてを試した後、最終的に私が助けたのは、同じ設定ページの「アンマネージコードのデバッグを有効にする」チェックボックス(プロジェクトプロパティ-デバッグ)です。コードの最適化には直接関係しませんが、これを有効にすると、VSはライブラリを最適化せず、デバッグできます。

3
Miloš

Visual StudioとMonoDevelopの間のあちこちにあったF#プロジェクトでこの問題が発生しました。 VSでは、最適化ボックスはチェックされていませんでしたが、デバッガーに関する限り、確かに最適化が行われているように見えました。

プロジェクトファイルのXMLと正常なファイルのXMLを比較すると、問題は明らかでした。正常なプロジェクトには明示的な<optimize>false</optimize>行がありましたが、悪いプロジェクトには完全に欠落していました。 VSは、コンパイラーが反対のことを行っている間に、最適化が無効になっていることを明らかに推測していました。

解決策は、このプロパティをプロジェクトファイルに追加し、再読み込みすることでした。

3
Jason Holloway

私はVS 2010でも同じ問題を抱えていました。ソリューションをクリーンアップして再構築すると、うまくいきました。

0
Sanjay Gupta

http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html を参照する上記のvickramdsのコメントは、私のためにそれをしました。すべてを確認しました-すべてのdll、pdbファイルをローカルbinフォルダーから削除、クリーン、リビルド、一時ASP.NETファイルのすべてのフォルダーをクリア、TRACE/DEBUGフラグが設定されていることを確認、DLLパスなどを確認。

影響を受けるプロジェクトのために、それが失われないようにそれを置くには:

プロジェクトのプロパティ->ビルド->詳細設定->デバッグ情報:完全。

もちろん、特に意図しない限り、これを行う前に、デバッグ構成が選択されていることを確認したい。

0
Mayyit

このメッセージは、Visual Studio 2017に移行したときに受信し始めました。このページのアイデアはどれも役に立たなかった。別の投稿で私はこの提案を見つけ、それはDID仕事-削除:

[Assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

... AssemblyInfoファイルから。

0
Crazy Cat

私にとっては、VS2017とVS2019で起こっていました。 「モジュールのロード時のJIT最適化の抑制」オプションを選択した後、停止しました。

enter image description here

0
farfareast

ASP.NETプロジェクトをデバッグする場合は、プロジェクトの[プロパティ]> [Web]> [サーバー]ドロップダウンが(ここで他のすべてをチェックすることに加えて)[IIS Express]に設定されていることを確認します。

0
Overlord Zurg

デバッグ構成(VS 2017モジュールウィンドウから見た場合)でも最適化されたc ++/cli mfc拡張DLLが混在していました。以前の回答が示唆したように、「VS2013では、ツール->オプション->デバッグ->全般に移動し、「管理互換モードを使用」を有効にします。これにより、新しい関数評価動作が無効になります。」この設定はVS 2017にもあります。

しかし、それだけでは十分ではなかったので、UseDebugLibraries設定を別のMFCアプリのプロジェクトファイルから拡張dllプロジェクトファイルにコピーしました。

    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
      ...
      <UseDebugLibraries>true</UseDebugLibraries>

その後、再構築すると問題が修正されました。

0
owluCoder