支援的程式碼變更及限制 (C++)
Visual C++ 的 [編輯後繼續] 可處理大多數的程式碼變更類型。 不過,有些變更無法在程式執行期間套用。 若要套用這些變更,您必須停止執行,並建置新版的程式碼。
如需在 Visual Studio 中使用 C++ 的 [編輯後繼續] 的相關資訊,請參閱編輯後繼續 (Visual C++)。
本文內容
不支援的變更
不支援的情節
連結的限制
先行編譯標頭的限制
IDL 屬性的限制
不支援的變更
偵錯工作階段期間不能套用下列 C/C++ 變更:
大部分全域或靜態資料的變更。
變更從另一部電腦複製而來,而不是在本機上建置的可執行檔。
變更會影響物件 (例如,類別的資料成員) 配置的資料類型。
加入超過 64K 位元組的新程式碼或資料。
在指令指標之前的某一點加入需要建構函式的變數。
會影響需要執行階段初始化之程式碼的變更。
在某些執行個體中加入例外狀況處理常式。
變更資源檔。
變更唯讀檔中的程式碼。
變更沒有對應之 PDB 檔的程式碼。
變更沒有目的檔的程式碼。
如果您進行上述其中一項變更,並嘗試套用程式碼變更,則 [輸出] 視窗中會出現錯誤或警告訊息。
- [編輯後繼續] 不會更新靜態程式庫。 如果您變更靜態程式庫,執行仍會使用舊版繼續進行,而且不會發出任何警告。
不支援的情節
C/C++ 的 [編輯後繼續] 無法用於下列偵錯案例中:
偵錯以 /Zo (Enhance Optimized Debugging) 編譯的原生應用程式
對 Windows 市集應用程式或元件偵錯。
在 Windows 98 上偵錯。
混合模式 (原生/Managed) 偵錯。
Javascript 偵錯。
SQL 偵錯
對傾印檔偵錯。
在未選取 [發生未處理的例外狀況時回溯呼叫堆疊] 選項的情況下,於發生未處理的例外狀況後編輯程式碼。
使用 [附加至] 來進行應用程式偵錯,而不要選擇 [偵錯] 功能表上的 [啟動] 來執行應用程式。
偵錯最佳化程式碼
由於建置錯誤以致新版本建置失敗之後,對舊版程式碼進行偵錯。
本文內容
連結的限制
停用 [編輯後繼續] 的連結器選項 | 自動重新連結的限制
停用 [編輯後繼續] 的連結器選項
下列連結器選項停用 [編輯後繼續]:
設定 /OPT:REF、/OPT:ICF,或 /INCREMENTAL:NO 會停用 [編輯後繼續],並且產生下列警告:
連結:警告 LNK4075:由於 /OPT 而忽略 /EDITANDCONTINUE
規格
設定 /ORDER、/RELEASE 或 /FORCE,會停用 [編輯後繼續] 並且產生這則警告:
連結:警告 LNK4075:由於 /option 而忽略 /INCREMENTAL
規格
設定任何能夠防止建立程式資料庫 (.PDB) 檔的選項,即可停用 [編輯後繼續] 並且不顯示任何特定警告。
自動重新連結的限制
根據預設,[編輯後繼續] 會在偵錯工作階段結束後重新連結程式,建立最新的執行檔。
如果您不是在原來的組建位置上偵錯,[編輯後繼續] 無法重新連結您的程式。 會有一則訊息告訴您必須手動重建。
[編輯後繼續] 不重建靜態程式庫。 如果您使用 [編輯後繼續] 來變更靜態程式庫,則必須手動重建程式庫,再用它重新連結應用程式。
[編輯後繼續] 不會叫用自訂組建步驟。 如果您的程式使用自訂的建置步驟,您應當以手動方式重建,讓自訂的建置步驟能夠被叫用。 在那情況下,您可以在 [編輯後繼續] 之後停用重新連結,確保您會被提示以手動重建。
若要在編輯後繼續後停用重新連結
在 [偵錯] 功能表上選擇 [選項和設定]。
在 [選項] 對話方塊的 [偵錯] 節點下,選取 [編輯後繼續] 節點。
清除 [偵錯後重新連結程式碼變更] 核取方塊。
本文內容
先行編譯標頭的限制
根據預設,[編輯後繼續] 會在背景載入並處理預先編譯的標頭,以加速程式碼變更的處理。 載入預先編譯的標頭檔須配置實體記憶體,如果您是在一部 RAM 不足的電腦上進行編譯,這可能會是個問題。 您可以在偵錯時,使用 [Windows 工作管理員] 判斷可用的實體記憶體數量,來判斷這樣是否會發生問題。 如果此一數量大於預先編譯的標頭檔的大小,[編輯後繼續] 應該不會有問題。 如果數量小於您先行編譯的標頭大小,您可以防止 [編輯後繼續] 在背景中載入先行編譯的標頭。
若要停用編輯後繼續的先行編譯標頭的背景載入
在 [偵錯] 功能表上選擇 [選項和設定]。
在 [選項] 對話方塊的 [偵錯] 節點下,選取 [編輯後繼續] 節點。
清除 [允許先行編譯] 核取方塊。
本文內容
IDL 屬性的限制
[編輯後繼續] 不會重新產生介面定義 (IDL) 檔, 所以您偵錯時並不會反映出 IDL 屬性的變更。 若要看到 IDL 屬性的變更結果,就必須停止偵錯並重建應用程式。 如果 IDL 屬性有所變更,[編輯後繼續] 並不會產生錯誤或警告。 如需詳細資訊,請參閱 IDL 屬性。
本文內容