完整訊息文字:目標程序在評估函式「function」時以代碼「code」結束。
為了讓您更輕鬆地檢查 .NET 物件的狀態,偵錯工具會自動強制偵錯程式執行其他程式代碼 (通常是屬性 getter 方法和 ToString 函式) 。 在大部分的案例中,這些函式會順利完成,或者擲回偵錯器可以攔截的例外。 不過,在某些情況下,無法攔截例外狀況,因為它們會跨越核心界限、需要使用者訊息泵送,或無法復原。 因此,屬性 getter 或 ToString 方法會執行明確終止進程的程式碼 (例如,呼叫 ExitProcess()) ,或擲回無法攔截的未處理例外狀況 (例如, StackOverflowException) 會終止偵錯進程並結束偵錯會話。 如果您遇到此錯誤訊息,則表示發生錯誤。
此問題的其中一個常見原因是,當偵錯工具評估呼叫自己的屬性時,這可能會導致堆疊溢位例外狀況。 無法復原堆疊溢位例外狀況,且目標程序會終止。
更正這個錯誤
這個問題有兩種可能的解決方案。
解決方案 #1:防止偵錯工具呼叫 getter 屬性或 ToString 方法
錯誤訊息會顯示偵錯工具嘗試呼叫之函式名稱。 使用函式的名稱,您可以嘗試從 [立即] 視窗重新評估該函式,以偵錯評估。 從 [立即] 視窗評估時,可以進行偵錯,因為與 [自動/區域變數/監看式] 視窗的隱含評估不同,偵錯工具會在未處理的例外狀況時中斷。
如果您可以修改此函式,您可以防止偵錯工具呼叫屬性 getter 或 ToString 方法。 請嘗試下列其中一項:
將方法變更為屬性 getter 或 ToString 方法以外的其他類型的程式碼,問題就會解決。
-或-
在類型上定義
DebuggerDisplay屬性,這樣您可以讓偵錯工具評估不同於ToString的內容。-或-
(對於屬性獲取者)將
[System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never)]屬性套用至屬性。 如果您的方法出於 API 相容性原因需要保留屬性,這會很有用,但它實際上應該是一個方法。
如果您無法修改這個方法,您可以嘗試在其他指令處中斷目標程序,然後重試評估。
解決方案 #2:停用所有隱含評估
如果先前的解決方案無法解決問題,您可以停用啟用 屬性評估 功能。
開啟 [工具>選項] 窗格,然後展開 [所有設定>偵錯>] 一般 區段。 清除 [啟用屬性評估和其他隱含函式呼叫] 核取方塊。
開啟「工具>選項」對話方塊,然後展開「調試>一般」區段。 清除 [啟用屬性評估和其他隱含函式呼叫] 核取方塊。
此變更會停用大部分的隱含函式評估,應該會解決問題。