評価:
.NET では、「関数評価 (funceval)」とは、デバッグ対象がどこかで停止している間に、任意の呼び出しを挿入する CLR の機能です。Funceval は、デバッガーが選択したスレッドを担当して、要求されたメソッドを実行します。funceval が完了すると、デバッグ イベントが発生します。技術的には、CLR はデバッガーが関数を発行する方法を定義しています。
CLR では、GC セーフ ポイント (つまり、スレッドが GC をブロックしないとき) と Funceval Safe (FESafe) ポイント (つまり、CLR が実際に funceval のハイジャックを実行できる場所) にあるスレッドでのみ funceval を開始できます。したがって、CLR の考えられるシナリオでは、スレッドは次のようにする必要があります。
マネージ コードで (および GC セーフ ポイントで) 停止: これは、ネイティブ コードで関数を実行できないことを意味します。ネイティブ コードは CLR の制御外にあるため、関数をセットアップできません。
最初のチャンスまたは未処理のマネージ例外 (および GC セーフ ポイント) で停止しました。つまり、例外の発生時に、可能な限り調査して、その例外が発生した理由を特定します。(例: デバッガーは、発生した例外の Message プロパティを評価して確認しようとする場合があります。)
全体として、マネージド コードで停止する一般的な方法には、ブレークポイント、ステップ、Debugger.Break 呼び出し、例外のインターセプト、またはスレッド開始での停止が含まれます。これは、メソッドと式の評価に役立ちます。
考えられる解決策: 評価に基づいて、スレッドが FESafe および GCSafe ポイントにない場合、CLR はスレッドをハイジャックして機能を開始することはできません。一般に、以下は、funceval が期待どおりに開始されることを確認するのに役立ちます。
ステップ1:
「リリース」ビルドをデバッグしようとしていないことを確認してください。リリースは完全に最適化されているため、議論のエラーにつながります。標準ツールバーまたは構成マネージャーを使用して、デバッグとリリースを切り替えることができます。
ステップ2:
それでもエラーが発生する場合は、最適化のためにデバッグ オプションが設定されている可能性があります。プロジェクトの「プロパティ」の下にある「コードの最適化」プロパティを確認してチェックを外します。
プロジェクトを右クリックし、[プロパティ] オプションを選択します。[ビルド] タブに移動し、[コードを最適化する] チェックボックスをオフにします。</p>
ステップ #3:
それでもエラーが発生する場合は、デバッグ情報モードが正しくない可能性があります。「Advanced Build Settings」の下で確認して「full」に設定します。
プロジェクトを右クリック [プロパティ] オプションを選択 [ビルド] タブに移動 [詳細設定] ボタンをクリック [デバッグ情報] を [フル] に設定</p>
ステップ #4:
それでも問題が解決しない場合は、次のことを試してください。
ソリューション ファイルの「クリーン」と「リビルド」を実行します。デバッグ中: モジュール ウィンドウに移動します (VS メニュー -> デバッグ -> ウィンドウ -> モジュール)。ロードされたモジュールのリストでアセンブリを見つけます。ロードされたアセンブリに対してリストされたパスが期待どおりであることを確認します ファイルの変更されたタイムスタンプをチェックして、アセンブリが実際に再構築されたことを確認します ロードされたモジュールが最適化されているかどうかを確認します
結論:
これはエラーではなく、特定の設定に基づく情報であり、.NET ランタイムの動作に基づいて設計されたものです。