デバッグモードでVisual Studio 2010を使用していますが、「コードの最適化」のチェックを外しています。デバッガーで変数をすばやく監視(またはホバー)することはできません。 「現在のメソッドのコードが最適化されているため、式を評価できません」というエラーが表示されます。
Int i = -3のような行でさえ、iを簡単に監視すると、「ローカルまたは引数 'i'の値を取得できません。この命令ポインターでは使用できないため、おそらく最適化されているためです。」
この link 同様の質問で参照されているものは当てはまらないようです。
不足している設定はありますか?
プロジェクトがデバッグモードにある間、ソリューションはそうではありませんでした。私がそれを変更したとき、それは働いた。
VS 2010を使用していたときにこの問題が発生しました。ソリューション構成で(デバッグ)が選択されています。これを解決するには、プロジェクトプロパティの[コードの最適化]プロパティをオフにします。プロジェクト(右クリック)=>プロパティ=>ビルド(タブ)=>最適化コードのチェックを外します
最適化されたボックスがチェックされていないにもかかわらず、最適化された/リリースビルドをデバッグしているようです。あなたが試すことができるものは次のとおりです。
[デバッグ]-> [Windows]メニューに[モジュール]メニュー項目が表示されない場合は、[カスタマイズ...]メニューに追加する必要があります。
VS2013で、[ツール]-> [オプション]-> [デバッグ]-> [全般]に移動し、[管理互換モードを使用]を有効にします。これにより、新しい関数評価動作が無効になります。
デバッグモードで実行してみてください。リリースモードで実行している場合は、このメッセージが表示されます。
私の状況は、上記の回答のいずれにも当てはまりませんでした。私は次を見つけました: MSDN記事 いくつかのプリミティブなネイティブスレッド操作でスタックすると、デバッガーがデータにアクセスできないことを説明するスレッドについて。例として、スレッドがTask.Wait()に座っているとき、これが起こります。
同じ問題がありました。しかし、私の場合、Debuggable
属性はプロジェクトのAssemblyInfo.cs
ファイルにハードコーディングされているため、コンパイルによって(上書き)書き込まれません。 Debuggable
属性を指定する行を削除した後に機能しました。
VS2008でも同じ問題が発生しました。私の場合は、solution-rebuildで解決しました。
他にできることの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
言及した@Kragenとは別に、Webプロジェクトをデバッグする場合
visual Studioを閉じて、C:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Filesにある一時ファイルを削除してください。
「現在のメソッドのコードが最適化されているため、式を評価できません。」メッセージが表示されたら、Debugger.Break()
ステートメントの発行後にF10を押して次のステートメントに進みます。
次のステートメントに進み、デバッグビルドを実行していると仮定すると、このメッセージは消えます。
テストベッドWebアプリからクラスライブラリをデバッグしているときにも同じ問題が発生しました。私はテストベッドでリリースバージョンを参照していましたが、それはクラスライブラリプロパティで最適化されるように設定されていました。
クラスライブラリプロパティのリリースバージョンのコードの最適化チェックボックスをオフにすると、作成中に問題が解決しました。
これは後の答えだと思いますが、将来、他の人を助けるかもしれないこの問題に対処する方法への別の参照を見つけました。この Webページ は、最適化を妨げる環境変数(COMPLUS_ZapDisable = 1)の設定について説明しています。少なくとも私にとってはそうでした! (Visual Studioホスティングプロセスを無効にすることの2番目の部分を忘れないでください。)私の場合、外部DLLをシンボルサーバーを介してデバッグしていたので、これはさらに関連性があったかもしれませんが、わからない。
「コードの最適化」プロパティがチェックされていない問題については、コードは最適化されたままコンパイルされます:すべてを試した後、最終的に私が助けたのは、同じ設定ページの「アンマネージコードのデバッグを有効にする」チェックボックス(プロジェクトプロパティ-デバッグ)です。コードの最適化には直接関係しませんが、これを有効にすると、VSはライブラリを最適化せず、デバッグできます。
Visual StudioとMonoDevelopの間のあちこちにあったF#プロジェクトでこの問題が発生しました。 VSでは、最適化ボックスはチェックされていませんでしたが、デバッガーに関する限り、確かに最適化が行われているように見えました。
プロジェクトファイルのXMLと正常なファイルのXMLを比較すると、問題は明らかでした。正常なプロジェクトには明示的な<optimize>false</optimize>
行がありましたが、悪いプロジェクトには完全に欠落していました。 VSは、コンパイラーが反対のことを行っている間に、最適化が無効になっていることを明らかに推測していました。
解決策は、このプロパティをプロジェクトファイルに追加し、再読み込みすることでした。
私はVS 2010でも同じ問題を抱えていました。ソリューションをクリーンアップして再構築すると、うまくいきました。
http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html を参照する上記のvickramdsのコメントは、私のためにそれをしました。すべてを確認しました-すべてのdll、pdbファイルをローカルbinフォルダーから削除、クリーン、リビルド、一時ASP.NETファイルのすべてのフォルダーをクリア、TRACE/DEBUGフラグが設定されていることを確認、DLLパスなどを確認。
影響を受けるプロジェクトのために、それが失われないようにそれを置くには:
プロジェクトのプロパティ->ビルド->詳細設定->デバッグ情報:完全。
もちろん、特に意図しない限り、これを行う前に、デバッグ構成が選択されていることを確認したい。
このメッセージは、Visual Studio 2017に移行したときに受信し始めました。このページのアイデアはどれも役に立たなかった。別の投稿で私はこの提案を見つけ、それはDID仕事-削除:
[Assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
... AssemblyInfoファイルから。
ASP.NETプロジェクトをデバッグする場合は、プロジェクトの[プロパティ]> [Web]> [サーバー]ドロップダウンが(ここで他のすべてをチェックすることに加えて)[IIS Express]に設定されていることを確認します。
デバッグ構成(VS 2017モジュールウィンドウから見た場合)でも最適化されたc ++/cli mfc拡張DLLが混在していました。以前の回答が示唆したように、「VS2013では、ツール->オプション->デバッグ->全般に移動し、「管理互換モードを使用」を有効にします。これにより、新しい関数評価動作が無効になります。」この設定はVS 2017にもあります。
しかし、それだけでは十分ではなかったので、UseDebugLibraries設定を別のMFCアプリのプロジェクトファイルから拡張dllプロジェクトファイルにコピーしました。
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
...
<UseDebugLibraries>true</UseDebugLibraries>
その後、再構築すると問題が修正されました。