共用方式為


支援的程式碼變更及限制 (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) 檔的選項,即可停用 [編輯後繼續] 並且不顯示任何特定警告。

自動重新連結的限制

根據預設,[編輯後繼續] 會在偵錯工作階段結束後重新連結程式,建立最新的執行檔。

如果您不是在原來的組建位置上偵錯,[編輯後繼續] 無法重新連結您的程式。 會有一則訊息告訴您必須手動重建。

[編輯後繼續] 不重建靜態程式庫。 如果您使用 [編輯後繼續] 來變更靜態程式庫,則必須手動重建程式庫,再用它重新連結應用程式。

[編輯後繼續] 不會叫用自訂組建步驟。 如果您的程式使用自訂的建置步驟,您應當以手動方式重建,讓自訂的建置步驟能夠被叫用。 在那情況下,您可以在 [編輯後繼續] 之後停用重新連結,確保您會被提示以手動重建。

若要在編輯後繼續後停用重新連結

  1. 在 [偵錯] 功能表上選擇 [選項和設定]。

  2. 在 [選項] 對話方塊的 [偵錯] 節點下,選取 [編輯後繼續] 節點。

  3. 清除 [偵錯後重新連結程式碼變更] 核取方塊。

回到頁首本文內容

先行編譯標頭的限制

根據預設,[編輯後繼續] 會在背景載入並處理預先編譯的標頭,以加速程式碼變更的處理。 載入預先編譯的標頭檔須配置實體記憶體,如果您是在一部 RAM 不足的電腦上進行編譯,這可能會是個問題。 您可以在偵錯時,使用 [Windows 工作管理員] 判斷可用的實體記憶體數量,來判斷這樣是否會發生問題。 如果此一數量大於預先編譯的標頭檔的大小,[編輯後繼續] 應該不會有問題。 如果數量小於您先行編譯的標頭大小,您可以防止 [編輯後繼續] 在背景中載入先行編譯的標頭。

若要停用編輯後繼續的先行編譯標頭的背景載入

  1. 在 [偵錯] 功能表上選擇 [選項和設定]。

  2. 在 [選項] 對話方塊的 [偵錯] 節點下,選取 [編輯後繼續] 節點。

  3. 清除 [允許先行編譯] 核取方塊。

回到頁首本文內容

IDL 屬性的限制

[編輯後繼續] 不會重新產生介面定義 (IDL) 檔, 所以您偵錯時並不會反映出 IDL 屬性的變更。 若要看到 IDL 屬性的變更結果,就必須停止偵錯並重建應用程式。 如果 IDL 屬性有所變更,[編輯後繼續] 並不會產生錯誤或警告。 如需詳細資訊,請參閱 IDL 屬性

回到頁首本文內容

請參閱

其他資源

編輯後繼續 (Visual C++)