web-dev-qa-db-ja.com

ローカルまたは引数の値を取得できない

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.
172
curiousity

[プロジェクトプロパティ]に移動し、[ビルド]で[コードの最適化]チェックボックスがオフになっていることを確認します。

また、詳細オプション([ビルド]タブ)で[デバッグ情報]ドロップダウンを[完全]に設定します。

273
Karthik

VS 2015 Community Editionでも

[デバッグ]-> [オプション]または[ツール]-> [オプション]に移動します。

[デバッグ]-> [一般]-> [モジュールのロード時にJIT最適化を抑制](管理のみ)を確認します。

96
xyq.384.b

最適化を有効にしてコンパイルすると、多くの変数が削除されます。例えば:

SomeType value = GetValue();
DoSomething(value);

ここでは、ローカル変数valueが通常削除され、代わりにスタックに値が保持されます-あなたが書いたように少し:

DoSomething(GetValue());

また、戻り値がまったく使用されない場合、「stloc」を介してローカルに保存されるのではなく、「pop」を介してドロップされます。 「また、ローカルは存在しません)。

このため、このようなビルドでは、デバッガはvalueの現在の値を取得できません。これは存在しないであるため、GetValue()DoSomething(...)の間の短い間だけ存在します。

そう;デバッグする場合は、リリースビルドを使用しないでください!または、少なくとも、デバッグ中に最適化を無効にします。

57
Marc Gravell

http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html

これはVisual Studio 2013で機能しました。

あなたがしなければならないのは..

  1. デバッグできないプロジェクトを右クリックします。
  2. プロジェクトの所有権に移動します。
  3. ビルドメニューをクリックします。
  4. 詳細ボタンをクリックします。
  5. デバッグ情報のドロップダウン値をフルに設定します。
  6. プロジェクトをリビルドします。

私はこれに遭遇し、Releaseビルド構成ではなくDebugビルド構成で実行していました。 Debugに切り替えると、変数が再び時計に表示されました。

18

同じ問題に直面したとき、再構築する前にソリューションをクリーニングする必要がありました。それは私のためにそれの世話をしました。

7
CJe

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

6
Miloš

Visual Studio 2017では、[デバッグ]-> [オプション]に移動し、[デバッグ]-> [全般]-> [このオプションをチェック]

relevant Visual Studio 2017 Options

4
Zahid Hasan

同じ問題に直面しており、解決策はSolution ConfigurationReleaseからDebugに変更することです。それが役に立てば幸い

4
Hoang Tran

プロジェクトを実行し、IISプロセスにアタッチしてデバッグしているときに、同じ問題が発生することがわかりました。また、最適化をオフにしてデバッグモードで実行していました。コードはうまくコンパイルされていると思っていましたが、切り離してコンパイルしようとしたときに、参照の1つが見つかりませんでした。これは、ここで別の開発者が参照の場所を変更および変更したためです。参照にはアラートシンボルが表示されなかったため、編集を行うまではすべて問題ないと思いました。参照を修正して再度実行すると、機能しました。

3
Derreck Dean

私の場合、Web APIプロジェクトで作業していました。プロジェクトは完全なデバッグに正しく設定されていましたが、デバッグしようとしたIISプロセスにアタッチするたびにこのエラーが表示されました。その後、公開構成がリリース構成を使用するように設定されていることに気付きました。そのため、ドットネットWeb APIプロジェクトの「公開」機能を使用している場合、もう1つ確認する場所は公開プロファイルです。

2
user8683595

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 /

1
iberodev

同じ問題がありました。上記のすべてを試してみましたが、プロジェクトの{PROJECT_ROOT}\bin\Release\netcoreapp2.2および{PROJECT_ROOT}\obj\Release\netcoreapp2.2内のすべても削除する必要がありました。 Azure Web AppでDeployment tools/bitbucketを使用していますが、実際にどのファイルがデプロイされたかを調べたいため、Build >> Publish >> Azureへのパブリッシュを試しました。

0
ozzy432836

Visual Studio 2012の場合:

プロジェクトプロパティ->デバッグ->「Visual Studioホスティングプロセスを有効にする」のチェックを外します。

0
Milana

Visual Studio 2017または2015の場合:

ソリューションに移動してソリューションを右クリックし、[プロパティ]-> [すべての構成]-> [デバッグ]を選択して、[OK]をクリックします。再構築して実行した後、このソリューションはうまくいきました。

0
Kalyan

AssemblyInfoファイルにDebuggable属性があるかどうかを確認します。存在する場合は、それを削除してソリューションを再構築し、ローカル変数が使用可能になるかどうかを確認します。

デバッグ可能な属性は、DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePointsに設定されました。これは このMSDN記事 に従って、JITコンパイラーに最適化を使用するように指示します。 AssemblyInfo.csファイルからこの行を削除すると、ローカル変数が使用可能になりました。

0
Nick