特定のプロジェクトだけウォッチ式が見れなかった件の解決策

こんにちは。
けいぞうです。

先日、VisualStudioでプログラムをデバッグ実行中に
ウォッチ式が見れなくなる事象が発生したので、備忘録として解決策をここに残します。

発生した事象

デバッグ中に見たい変数をウォッチ式に追加して中身を見てみようと思ったら以下のようなエラーメッセージが出るだけで中身を見れませんでした。

ローカル変数または引数はこの命令ポインターで利用できないため、値を取得することはできません。最適化されている可能性があります。

ソリューションの中に複数のプロジェクトが存在しているのですが、
特定のプロジェクトだけでウォッチ式が見れない。

見れるのもあるのに、どうしたものか。

ちなみにソースはC#
Visual Studio 2019

試したことその1

ググったら出てきたので下記を試す。

  1. ソリューションエクスプローラでウォッチ式が見れないプロジェクトを右クリックし、プロパティを選択
  2. ビルドタブ内の全般の「最適化コード」のチェックを外す

最初からチェックはずれとるやんけ!

一応チェック付けてリビルドして、
また外してリビルドして試してみたが変わらず・・・。

試したことその2

次に試したこと

  1. VisualStudioのメニューの デバッグ > オプション を選択
  2. デバッグ > 全般 を選択
  3. 「モジュールの読み込み中に JIT 最適化を抑制する」にチェック入れる
デ バ ッ グ ) テ ス ト ( S ) 
ウ イ ン ド ウ 
カ ( ッ ク の 開 始 ( S ) 
分 析 ( N ) 
ツ - ル 卩 ) 
拡 張 機 能 ( X ) 
カ ( ッ ク な し で 開 始 ( H ) 
パ フ ォ - マ ン ス プ ロ フ ァ イ ラ - 旧 … 
パ フ ォ - マ ン ス プ ロ フ ァ イ ラ - の 再 起 動 ( リ 
十 。 n プ ロ フ ァ イ 見 の 起 動 ( u ) … 
プ ロ セ ス に ア タ ッ チ ( P)„ 
そ の 他 の デ バ ッ グ タ ー ゲ ッ HH ) 
ス テ ッ プ イ ン ( リ 
ス テ ッ ブ オ ー バ ヨ 0 ) 
九 - ク ポ イ ン ト の 設 定 / 解 除 ( G ) 
九 - ク ポ イ ン ト の 作 成 間 
す べ て の プ レ - ク ポ イ ン ト の 削 除 ( D ) 
す べ て の プ レ - ク ポ イ ン ト の 無 効 化 ( N ) 
す べ て の ア ー タ ど ン ト を ク リ ア 
ア ー タ ン ト の 1 ク ス ポ ー ト : x 
デ - タ ン ト の イ ン ポ - ト 0 第 
オ プ シ ] ン ( 0 ) ~ 
Z 4AR ー 01 ReflectCreateTeam の デ バ ッ グ プ ロ バ テ ィ 
ウ イ ン ド ウ ) 
C 扉 + F5 
A ・ F2 
Ctrl+AIt+P 
Ctrl + Shift + F9

リビルドして実行すると、いけた!

この方法で無事ウォッチ式を見ることができました。

JITって何?

JITは(Just-In-Time Compiler)の略

日本語で「実行時コンパイラ」、
もっと直訳するとい「いまその場でコンパイラー!

つまり、事前にモジュールを動作させるためにコンパイルするのではなく、
デバッグ実行のように、ソースを読み込みながらコンパイルするようなときの話です。

それが「最適化」されることがあるという。

つまり、この変数の中身は今はメモリに持っておく必要ねえや!
って判断されると、ウォッチ式で見れなくなったりするってことですね。

そんないい感じの最適化せずにちゃんと全部やれや!
ってときはこの「最適化を抑制する」にチェックを入れればいいってことですね。

VisualStudioでデバッグ実行するときはデフォでこれONしてよって思うよね。
(今まではできたから実は自分でOFFにしたのか?謎。)