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


153

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

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

同様の質問で参照されているこのリンクは適用されていないようです。

私が見逃している設定はありますか?


4
torulflundgren.blogspot.com.au/2010/03/…これは私がこれに対して見つけた最良の解決策です。私は....のVisual Studio 2013でこれをテストし、働いていた
Dulanjana Wickramatantri

回答:


167

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


9
VS2012でこの問題が発生しましたが、ソリューションとすべてのプロジェクトが最適化なしのデバッグに設定されていました。ソリューションをクリーンアップ/再構築して修正しました。
saarp 2013

20
では...ソリューションを非デバッグモードに設定するにはどうすればよいですか?
user1431072 2015

user1431072-ソリューションまたはプロジェクトを右クリックしてプロパティを選択し、それをデバッグモードに設定できます
Yevgraf Andreyevich Zhivago

48

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


29

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

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

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


2
ソリューションが再構築されます。モジュールウィンドウは、アセンブリが最適化されていることを示します。[最適化]チェックボックスがオフになっているため、アセンブリが常に最適化されている理由がわかりません。ソリューションにはWebプロジェクトがありますが、私が見ているコードはデバッグモードのクラスライブラリプロジェクトにあります。
Tony_Henrich 2010

@Tony-ばかげた質問ですが、クラスライブラリの[最適化]チェックボックスはオフになっていますか?
Justin

はい。私は私の質問でこの事実を述べました。私はすでに自分の質問に答えました。
Tony_Henrich

1
私のProject.Web最適化はチェックされていませんが、Debug > Modules:(
J86

VSにデバッグ情報を強制的に更新させる唯一の方法は、オプションがチェックされていないのに、最適化されたと見なされるモジュールのアセンブリバージョンを増やすことでした。
alphanoch

14

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


ありがとう!提供された他のソリューションのうち、これは私にとって重要なものでした。不思議なことに、それは突然起こったのですが、何がそれを変えたのでしょうか。
squid808 2016

10

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


5
質問は、「Visual Studio 2010をデバッグモードで使用していて、「コードの最適化」のチェックを外している」と言っています。...この非回答は削除する必要があります。
Jim Balter 2017

真剣に。彼はデバッグで実行しているという質問でそれを言います。賛成の理由がわかりません。この回答は可能な解決策を汚染しています
John Demetriou

1
FWIW、このエラーメッセージを検索すると、この質問はGoogleで上位にランク付けされます。この答えは私にとっては正解でした(私がリリースモードであることを知りませんでした)。
Nate Barbettini、

彼は複数のアセンブリを持っている可能性があり、構成マネージャーでは、デバッグ中のアセンブリをreleaseまたはsthに設定できます。
madoxdev 2018

8

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


8

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


8

私にとってそれはVS2017とVS2019で起こっていました。「モジュールロード時のJIT最適化の抑制」オプションを選択した後、この問題は発生しなくなりました。

ここに画像の説明を入力してください


+1、これが私の問題の原因でした。構成が「デバッグ」で終了するときにXMLで最適化をオフにしているため、VSは実際にcsprojオプションを理解するのが得意ではないようです。MSBuildを直接呼び出す場合は問題なく機能しますが、VS自体では正しく機能しません。
TheBeardedQuack

5

VS2008でも同じ問題が発生しました。私の場合、ソリューションの再構築によって解決されました。


4

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

Visual Studioを閉じ、C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Filesにある一時ファイルを削除してみます


ソリューションにはWebプロジェクトがありますが、コードはクラスライブラリプロジェクトにあります。一時ファイルを何度も削除しました。
Tony_Henrich 2010

4

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

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

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

まだpdbが必要なので、次のようなものになります:yourDll.dll yourDll.pdb yourDll.ini

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

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


4

現在のメソッドのコードが最適化されているため、式を評価できません。」というメッセージが表示された場合Debugger.Break()文を、その後必ず次の文へのステップにF10を押してください。

次のステートメントにステップすると、デバッグビルドを実行していると想定すると、このメッセージは表示されなくなります。


2
それだけでした。...それを共有していただきありがとうございます、私はこの些細なヒントを見なくてもより多くの時間を無駄だろう..私は上記のすべてのソリューションを試してみたし、この小さな事は働いた
クシシュトフSzynter

いいえ。動作しませんでした。Vs17はまだリリースビルドをデバッグしていると思っています
John Demetriou

3

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


3

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

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


ありがとうございます。このチェックボックスを見つけるには、すべてのプロジェクトを右クリックし、[プロパティ]メニューから[ビルド]タブを選択します。
goamn 2014

3

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


3

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

プロジェクトファイルのXMLを健全なプロジェクトのXMLと比較したところ、問題は明らかでした。健全なプロジェクトには明確な<optimize>false</optimize>行があり、悪いプロジェクトには完全に欠けていました。VSは不在から最適化が無効になっていることを明らかに推論していましたが、コンパイラはその逆を行っていました。

解決策は、このプロパティをプロジェクトファイルに追加してリロードすることでした。


1

Visual Studio 2017に移行したときに、このメッセージが表示され始めました。このページのアイデアのうち、私が試したものはどれも役に立ちませんでした。別の投稿で私はこの提案を見つけ、それは機能しました-削除:

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

... AssemblyInfoファイルから。


@Crazy Catを愛してください。私はVS2019に移行したときに私に起こりました。
アントニオロドリゲス


0

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

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

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

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


0

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


0

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

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

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

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


0

Visual Studio 2012 では、[ ツール]> [デバッグ]> [ジャストインタイム ]の[ 管理 ]オプションを有効にするとうまくいきました。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.