支援的程式碼變更 (C#)
[編輯後繼續] 會處理方法主體內的大多數程式碼變更。但是在偵錯期間,無法套用方法主體外的變更和方法主體內的某些變更。若要套用這些不支援的變更,您必須停止偵錯,然後使用新版程式碼重新啟動偵錯。
偵錯工作階段期間不能將下列變更套用至 C#:
變更目前的陳述式或任何其他使用中陳述式。
在呼叫堆疊的函式中,使用中陳述式包含了任何陳述式,這些陳述式是被呼叫以取得目前的陳述式。
目前的陳述式會在來源視窗中以黃色背景標示。其他使用中陳述式會以灰色背景標示,而且是唯讀的。這些預設色彩可以在 [選項] 對話方塊中進行變更。
全域符號的變更包括下列各項:
加入新的型別。
將方法加入至型別。
變更型別的簽章。
將欄位、事件,或屬性加入至型別。
編輯匿名方法,或編輯包含匿名方法的任何方法。這些方法會以灰色背景標示。
加入新的匿名方法。
加入、移除,或變更屬性。
加入、移除或變更 using 指示詞。
移除或變更本機變數。允許加入本機變數。
將 foreach、using 或 lock 加入使用中陳述式前後。
修改包含 yield return 或 yield break 陳述式的方法。
變更具有欄位的建構函式 (Constructor),而這個欄位是以匿名方法進行初始化。
Unsafe 程式碼
除了一些額外的限制之外,變更 Unsafe 程式碼的限制與變更 Safe 程式碼的限制相同:
- [編輯後繼續] 不支援方法 (包含 stackalloc 運算子) 內不安全的程式碼變更。這只適用於使用中方法。當您進行偵錯時,目前位於呼叫堆疊上的任何函式都是使用中陳述式。
例外狀況
編輯後繼續支援會變為catch, finally,和try區塊中,有一些例外區塊在作用中的方法中,例如目前位於呼叫堆疊的方法。
位於使用中函式,而且這個函式是呼叫堆疊上的最後函式時,則 [編輯後繼續] 不支援:
新增catch或finally使用中陳述式前後的區塊。
加入巢狀層次大於六的巢狀例外狀況處理常式。
位於使用中函式,而且這個函式不是呼叫堆疊上的最後函式時,則 [編輯後繼續] 不支援:
新增catch, finally或try使用中陳述式前後的區塊。
加入巢狀層次大於六的巢狀例外狀況處理常式。
變更程式碼內try包含使用中陳述式區塊。
不支援的案例
[編輯後繼續] 無法用於下列偵錯案例中:
偵錯 LINQ 程式碼。如需詳細資訊,請參閱 Edit and Continue Not Supported for LINQ。
混合模式 (原生/Managed) 偵錯。
SQL 偵錯
偵錯 Dr.Watson 傾印。
未選取 [發生未處理的例外狀況時回溯呼叫堆疊] 選項,而發生無法控制的例外狀況後編輯程式碼。
偵錯內嵌的執行階段應用程式。
使用 [附加至] 來偵錯應用程式,而不是從 [偵錯] 功能表選擇 [啟動] 來執行應用程式。
偵錯最佳化程式碼
當目標為 64 位元應用程式時,偵錯 Managed 程式碼。如果要使用 [編輯後繼續],就必須將目標設定為 x86 (專案屬性, 編譯 索引標籤上, 進階編譯器設定。)
由於建置錯誤以致新版本建置失敗之後,偵錯舊版的程式碼。