C++ 專案的 [編輯並繼續] 會處理大部分類型的程式碼變更。 不過,某些變更無法在程式執行期間套用。 若要套用這些變更,您必須停止執行並建置程式碼的新版本。
如需在 Visual Studio 中使用 C++ 的編輯和繼續的相關資訊,請參閱編輯並繼續 (C++)。
需求
建置設定 (專案 > 屬性)
C/C++ > 一般 > 調試資訊格式:用於編輯和繼續的程式資料庫 (
/ZI)連結器 > 一般 > 啟用增量連結:是 (
/INCREMENTAL)任何不相容的連結器設定 (例如
/SAFESEH、 或/OPT:...) 都可能導致建置期間 LNK4075 警告。 範例:LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification
偵錯工具設定 (偵錯 > 選項)
開啟
開啟 偵錯(或工具)>對話方塊,然後展開 偵錯.NET/C++ 熱重載>。
選取下列一或所有選項以啟用此功能:
啟用熱重新載入:在連接偵錯工具 (F5) 的情況下啟動時啟用熱重新載入。
啟動時若未連接偵錯工具,啟用熱重新載入(Ctrl + )。
在檔案儲存時啟用熱重新載入:儲存檔案時啟用熱重新載入。
記錄冗長度:設定啟用熱重新載入時的記錄層級。 從 [最小 ] (預設)、[ 詳細] 或 [ 診斷] 中進行選擇。
變更這些設定會影響您處理的所有專案。 變更設定後,您不需要重建應用程式。 如果您從命令列或 makefile 建置應用程式,但您在 Visual Studio 環境中進行偵錯,如果您設定選項 /ZI ,您仍然可以使用 [編輯並繼續]。
不支援的變動
下列 C/C++ 變更無法在偵錯工作階段期間套用。 如果您進行任何這些變更,然後嘗試套用程式碼變更,則 「輸出」 視窗中會出現錯誤或警告訊息。
全域或靜態資料的多數變更。
對從另一部電腦複製且未在本機建置的可執行檔的變更。
影響物件配置的資料類型變更,例如類別的資料成員。
添加超過 64k 位元組的新代碼或數據。
在指令指標之前的某個點新增需要建構函式的變數。
影響需要執行階段初始化之程式碼的變更。
在某些情況下,新增例外狀況處理常式。
資源檔案的變更。
唯讀檔案中程式碼的變更。
在沒有對應 PDB 檔案的情況下變更程式碼。
對沒有物件檔案的程式碼進行變更。
在下列情境中修改 lambda:
- 當 lambda 具有靜態或全域成員時。
- 當您將 lambda 表達式傳遞給
std::function。 此方法會導致真正的 ODR 違規並導致 C1092。
[編輯並繼續] 不會更新靜態程式庫。 如果您在靜態程式庫中進行變更,則會繼續使用舊版本執行,且不會發出警告。
不支援的場景
在下列偵錯案例中,無法使用 C/C++ 的編輯並繼續:
偵錯使用 /Zo 編譯的原生應用程式 (增強最佳化偵錯)
使用 MSVC v120 工具集和 C/C++
/bigobj選項的專案。 使用/bigobj的 Edit and Continue 僅在 MSVC v140 和更新版本的編譯工具中支援。混合模式 (原生/受控) 偵錯。
JavaScript 偵錯。
SQL 偵錯。
除錯傾印檔案。
在未處理的例外狀況之後編輯程式碼,當未選取 [在 未處理的例外狀況上回復呼叫堆疊 ] 選項時。
使用 [附加至] 來偵錯應用程式,而不是在 [偵錯] 功能表上選擇 [開始] 來執行應用程式。
偵錯最佳化程式碼。
在新版本因建置錯誤而無法建置之後,偵錯舊版程式碼。
使用自訂編譯器 (cl.exe) 路徑。 基於安全性理由,若要在 [編輯並繼續] 期間重新編譯檔案,Visual Studio 一律會使用已安裝的編譯器。 如果您使用自訂編譯器路徑 (例如,透過檔案中的
$(ExecutablePath)自訂*.props變數) ,則會顯示警告,且 Visual Studio 會回復為使用相同版本/架構的已安裝編譯器。舊版架構/MSVC 工具集。 使用 MSVC v140 工具組時,預設偵錯工具支援 X86 和 X64 應用程式的 [編輯和繼續]。 舊版工具集僅支援 X86 應用程式。 早於 MSVC v120 的工具集應該使用舊版偵錯工具,方法是核取 [偵錯 > 選項 > 一般 > 使用原生相容模式],才能使用 [編輯並繼續]。
IDL 屬性限制
編輯並繼續不會重新產生介面定義語言 (IDL) 檔案。 因此,當您偵錯時,IDL 屬性的變更不會顯示。 若要查看 IDL 屬性變更的結果,您必須停止偵錯並重建應用程式。 如果 IDL 屬性已變更,則 [編輯並繼續] 不會產生錯誤或警告。 如需詳細資訊,請參閱 IDL 屬性。
診斷問題
如果您的案例不符合上述任何條件,您可以設定下列 DWORD 登錄值來收集進一步的詳細數據:
開啟開發人員命令提示字元。
執行以下命令:
VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1
在偵錯工作階段開始時設定此值,會導致 Edit and Continue 的各個元件大量輸出詳細的記錄至 輸出視窗>偵錯窗格。