Visual Studio 2010は、安全でないブロックの関数引数の1つのデータを殺します(他のWordはありません)。このエラーの原因は何ですか?次のメッセージはデバッガーによって表示されます。
Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
[プロジェクトプロパティ]に移動し、[ビルド]で[コードの最適化]チェックボックスがオフになっていることを確認します。
また、詳細オプション([ビルド]タブ)で[デバッグ情報]ドロップダウンを[完全]に設定します。
VS 2015 Community Editionでも
[デバッグ]-> [オプション]または[ツール]-> [オプション]に移動します。
[デバッグ]-> [一般]-> [モジュールのロード時にJIT最適化を抑制](管理のみ)を確認します。
最適化を有効にしてコンパイルすると、多くの変数が削除されます。例えば:
SomeType value = GetValue();
DoSomething(value);
ここでは、ローカル変数value
が通常削除され、代わりにスタックに値が保持されます-あなたが書いたように少し:
DoSomething(GetValue());
また、戻り値がまったく使用されない場合、「stloc」を介してローカルに保存されるのではなく、「pop」を介してドロップされます。 「また、ローカルは存在しません)。
このため、このようなビルドでは、デバッガはvalue
の現在の値を取得できません。これは存在しないであるため、GetValue()
とDoSomething(...)
の間の短い間だけ存在します。
そう;デバッグする場合は、リリースビルドを使用しないでください!または、少なくとも、デバッグ中に最適化を無効にします。
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
これはVisual Studio 2013で機能しました。
あなたがしなければならないのは..
私はこれに遭遇し、Release
ビルド構成ではなくDebug
ビルド構成で実行していました。 Debug
に切り替えると、変数が再び時計に表示されました。
同じ問題に直面したとき、再構築する前にソリューションをクリーニングする必要がありました。それは私のためにそれの世話をしました。
「コードの最適化」プロパティがチェックされていない問題については、コードは最適化されたままコンパイルされます:すべてを試した後、最終的に私が助けたのは、同じ設定ページの「アンマネージコードのデバッグを有効にする」チェックボックス(プロジェクトプロパティ-デバッグ)です。コードの最適化には直接関係しませんが、これを有効にすると、VSはライブラリを最適化しなくなり、デバッグできます。
同じ問題に直面しており、解決策はSolution Configuration
をRelease
からDebug
に変更することです。それが役に立てば幸い
プロジェクトを実行し、IISプロセスにアタッチしてデバッグしているときに、同じ問題が発生することがわかりました。また、最適化をオフにしてデバッグモードで実行していました。コードはうまくコンパイルされていると思っていましたが、切り離してコンパイルしようとしたときに、参照の1つが見つかりませんでした。これは、ここで別の開発者が参照の場所を変更および変更したためです。参照にはアラートシンボルが表示されなかったため、編集を行うまではすべて問題ないと思いました。参照を修正して再度実行すると、機能しました。
私の場合、Web APIプロジェクトで作業していました。プロジェクトは完全なデバッグに正しく設定されていましたが、デバッグしようとしたIISプロセスにアタッチするたびにこのエラーが表示されました。その後、公開構成がリリース構成を使用するように設定されていることに気付きました。そのため、ドットネットWeb APIプロジェクトの「公開」機能を使用している場合、もう1つ確認する場所は公開プロファイルです。
Azure WebサイトのWebアプリをデバッグするときにこの問題が発生した場合の追加の回答として:
たとえば、GitHubからデプロイする場合、コードはデフォルトでAzureサーバーoptimizedでコンパイルされます。
SCM_BUILD_ARGS
を/p:Configuration=Debug
に設定して、デバッグ可能な方法でコンパイルするようサーバーに指示します
しかし、さらにオプションがあります。これを参照してください: http://Azure.Microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-Azure-web-sites-part-3-multi-instance-environment -and-git /
同じ問題がありました。上記のすべてを試してみましたが、プロジェクトの{PROJECT_ROOT}\bin\Release\netcoreapp2.2および{PROJECT_ROOT}\obj\Release\netcoreapp2.2内のすべても削除する必要がありました。 Azure Web AppでDeployment tools/bitbucketを使用していますが、実際にどのファイルがデプロイされたかを調べたいため、Build >> Publish >> Azureへのパブリッシュを試しました。
Visual Studio 2012の場合:
プロジェクトプロパティ->デバッグ->「Visual Studioホスティングプロセスを有効にする」のチェックを外します。
Visual Studio 2017または2015の場合:
ソリューションに移動してソリューションを右クリックし、[プロパティ]-> [すべての構成]-> [デバッグ]を選択して、[OK]をクリックします。再構築して実行した後、このソリューションはうまくいきました。
AssemblyInfoファイルにDebuggable属性があるかどうかを確認します。存在する場合は、それを削除してソリューションを再構築し、ローカル変数が使用可能になるかどうかを確認します。
デバッグ可能な属性は、DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePointsに設定されました。これは このMSDN記事 に従って、JITコンパイラーに最適化を使用するように指示します。 AssemblyInfo.csファイルからこの行を削除すると、ローカル変数が使用可能になりました。