18

.NET用のMicrosoftデバッグシンボルを使用してASP.NETWebサイトコードをデバッグすると、.NETフレームワークコードをデバッグしているときに、ほとんどの変数でこのばかげた「結果」が得られ続けます(もちろん、情報を取得するようにVS2008に指示したMicrosoftSymbolServerから)

Cannot obtain value of local or argument 'cookie' as 
it is not available at this instruction pointer, possibly because 
it has been optimized away.

私が使用しているコードは、最適化され、コンパイルされたコードを使用しているようです。その場合、最適化しないように指示できますか?私はDEBUG構成にいます。コードをステップ実行するときにローカル変数の値を表示/取得できないため、デバッグできないため、非常にイライラします。

手がかり/考えはありますか?

4

5 に答える 5

19

Shawn Burke は、彼のブログでこれを無効にする方法を説明しています。

まず、JIT 最適化なしで Visual Studio を読み込む CMD を作成します。

set COMPLUS_ZapDisable=1
cd /d "%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\ide\"
start devenv.exe
exit

Visual Studio プロジェクトで、次の手順を実行します。

1) プロジェクト ファイルを右クリックし、[プロパティ] を選択します。

2) [デバッグ] タブを選択し、[Visual Studio ホスティング プロセスを有効にする] のチェックを外します。

3) デバッガーでアプリケーションを起動します。

于 2009-10-05T08:19:08.813 に答える
7

通常の.Netアプリケーションの場合、開始バイナリの横にある.INIファイルでJIT最適化の使用を無効にすることができます。これがどのように達成されるかへのリンクはここにあります

http://blogs.msdn.com/jaredpar/archive/2008/08/29/disabling-jit-optimizations-while-debugging.aspx

ただし、ASP.Netのデバッグは少し異なり、これが機能するかどうかはわかりません。軽量Webサーバー(カッシーニ)を使用してローカルでデバッグしている場合は、このトリックをカッシーニ自体に適用できます。IISの内部でWebサーバー上で直接デバッグしている場合、このトリックを機能させる方法はわかりませんが、正しい方向に導いてくれることを願っています。

于 2008-11-17T02:18:52.583 に答える
3

多くの調査の結果、IIS7 / Windows 7 x64でIISでホストされているアプリケーションに接続するときに、この「COMPLUS_ZapDisable」手法を機能させる方法を見つけることができました。

私の場合、Reflector Proによって作成されたシンボルを使用していますが、OPが要求したMicrosoftシンボルでも機能すると思います。

秘訣は、その環境変数を設定する適切な場所を見つけて、その設定を有効にしてw3wp.exeを起動することです。これを行うには、「COMPLUS_ZAPDISABLE」という文字列キーをレジストリの「HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SessionManager\Environment」に追加します。キー値を「1」に設定すると、うまくいくはずです。本番環境ではこれを行わないでください=)

RedGateからのこの投稿の著者であるCliveTongに、私を正しい方向に向けてくれたことを称賛します。

于 2013-03-12T14:26:55.040 に答える
1

.NET Frameworkコードは最適化されているため、最適化されたコードにはおそらく存在しないため、すべての変数を表示することはできません。.NETFramework自体の内部でデバッグしようとしていると思います。残念ながら、それについてできることは何もありません。

于 2008-11-17T02:18:26.640 に答える