Visual Studio 2010は、安全でないブロックの関数の引数の1つにあるデータを削除します(他の単語はありません)。このエラーの原因は何ですか?次のメッセージはデバッガによって表示されます。
Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
Visual Studio 2010は、安全でないブロックの関数の引数の1つにあるデータを削除します(他の単語はありません)。このエラーの原因は何ですか?次のメッセージはデバッガによって表示されます。
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
Debug-> OptionsまたはTools-> Optionsに移動します
そして、Debugging-> General-> Suppress JIT optimization on module load(Managed only)をチェックします。
最適化を有効にしてコンパイルすると、多くの変数が削除されます。例えば:
SomeType value = GetValue();
DoSomething(value);
ここではローカル変数value
は通常削除され、代わりにスタックに値を保持します-作成したかのように少し:
DoSomething(GetValue());
また、戻り値がまったく使用されない場合は、「pop」を介してドロップされます(「stloc」を介してローカルに格納されるのではなく、ローカルは存在しません)。
このため、そのようなビルドでデバッガは、現在の値を取得することはできませんvalue
ので、それは存在しませんが -それが唯一の間の短い瞬間のために存在するGetValue()
とDoSomething(...)
。
そう; デバッグしたい場合...リリースビルドを使用しないでください!少なくとも、デバッグ中は最適化を無効にします。
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
これはビジュアルスタジオ2013で私のために働いた。
あなたがしなければならないすべては..
私はこれに遭遇し、Release
ビルド構成ではなくビルド構成で実行していましたDebug
。Debug
変数に戻ると、再び時計に表示された変数に戻りました。
「コードの最適化」プロパティのチェックが解除されているにもかかわらず、コードが最適化されたままコンパイルされる問題について:すべてを試した後、最終的に私を助けたのは、同じ設定ページ(プロジェクトプロパティ-デバッグ)の[アンマネージコードのデバッグを有効にする]チェックボックスをオンにすることでした。コードの最適化とは直接関係ありませんが、これを有効にすると、VSはライブラリを最適化しなくなり、デバッグできます。
Enable unmanaged code debugging
。ありますがEnable native code debugging
、チェックしてみましたが違いはありませんでした。
私の場合、私はWeb APIプロジェクトで作業しており、プロジェクトは正しく完全デバッグに設定されていましたが、デバッグしようとしたIISプロセスに接続するたびに、このエラーが引き続き表示されました。次に、公開プロファイルがリリース構成を使用するように設定されていることに気付きました。したがって、dotnet Web APIプロジェクトの「公開」機能を使用している場合は、もう1つ確認する場所が公開プロファイルです。
Azure WebサイトのWebアプリをデバッグするときにこの問題が発生する人のための追加の回答として:
たとえば、GitHubからデプロイする場合、コードはデフォルトで最適化されたAzureサーバーでコンパイルされます。
私は設定して、デバッグの方法でコンパイルするサーバーを教え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 /
AssemblyInfoファイルにDebuggable属性があるかどうかを確認します。存在する場合は、それを削除してソリューションを再構築し、ローカル変数が使用可能になるかどうかを確認します。
私のデバッグ可能な属性は、DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePointsに設定されていました。このMSDNの記事によれば、最適化を使用するようJITコンパイラーに指示しています。AssemblyInfo.csファイルからこの行を削除すると、ローカル変数が使用可能になりました。
同じ問題がありました。上記のすべてを試してみたところ、プロジェクトの{PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2および{PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2内のすべても削除する必要があることがわかりました。Azure Webアプリで展開ツール/ビットバケットを使用していますが、実際に展開されているファイルを確認したかったので、ビルド>>公開>> Azureに公開を試しました。
以前にWPFアプリケーションで同じ問題を抱えていましたが、ここでのすべての解決策は問題を解決しませんでした。問題は、次のソリューションがようモジュールがすでに最適化されたということでしたWORKSていない(または、問題を解決するには十分ではありません):
モジュールはまだ最適化されてロードされています。次のスクリーンショットを参照してください。
この問題を解決するには、最適化されたモジュールを削除する必要があります。最適化されたモジュールパスを見つけるには、Process Hackerなどのツールを使用できます。
「プロセスパネル」でプログラムをダブルクリックし、新しいウィンドウで「.NETアセンブリ」タブを開きます。次に、「ネイティブイメージパス」の列に、すべての最適化されたモジュールのパスが表示されます。最適化を解除するフォルダーを見つけて、フォルダーを削除します(下のスクリーンショットを参照):( 明らかな理由で会社名をぼかしました)
アプリケーションを再起動し(手順1のチェックボックスを正しくオンにして)、動作するはずです。
注:別のプロセスによって開かれたため、ファイルがロックされている可能性があります。VisualStudioを閉じてみてください。ファイルがまだロックされている場合は、Lock Hunterなどのプログラムを使用できます。
Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder