除錯

Nvim 的 :help 頁面,從 原始碼 使用 tree-sitter-vimdoc 解析器 產生


除錯 Vim
這是用來除錯 Vim 本身,當它無法正常運作時。關於除錯 Vim 腳本、函式等,請參閱 debug-scripts
1. 使用 gcc 和 gdb 找出崩潰位置 debug-gcc gdb
當 Vim 在其中一個測試檔案中崩潰,而且你使用 gcc 進行編譯時,你可以執行以下步驟來找出 Vim 崩潰的確切位置。這也適用於使用 MingW 工具的情況。
1. 使用 "-g" 選項編譯 Vim(在 src/Makefile 中有一行可以取消註解)。同時確保 "strip" 已停用(不要安裝它,或使用 "STRIP = /bin/true" 這一行)。
2. 執行這些命令 (將 "11" 替換為失敗的測試編號)
cd testdir
gdb ../vim
run -u unix.vim -U NONE -s dotest.in test11.in
3. 檢查 Vim 崩潰的位置,gdb 應該會提供相關訊息。
4. 使用以下命令從 gdb 取得堆疊追蹤:
where
你可以使用以下命令檢查堆疊追蹤中的不同位置:
frame 3
將 "3" 替換為堆疊追蹤中的其中一個數字。
2. 定位記憶體洩漏 debug-leaks valgrind
如果你懷疑 Vim 正在洩漏記憶體,而且你使用的是 Linux,valgrind 工具對於找出記憶體洩漏非常有用。
首先,使用定義的 EXITFREE 來建置 Vim。在 MAKEFILE 中搜尋它並取消註解該行。
使用以下命令啟動 Vim:
valgrind --log-file=valgrind.log --leak-check=full ./vim
注意: Vim 的執行速度會慢很多。如果你的 vimrc 很大或你有幾個外掛程式,你需要耐心等待啟動,或者使用 "-u NONE" 參數執行。
通常會有來自函式庫的一些洩漏,例如 getpwuid() 和 XtVaAppCreateShell()。這些是無法避免的。位元組數應該非常小,一個 Kbyte 或更少。
3. Windows 錯誤回報 debug-win32
如果 Windows 版本的 Vim 以可重現的方式崩潰,你可以採取一些步驟來提供有用的錯誤回報。
3.1 一般
你必須取得你的可執行檔的偵錯符號 (PDB) 檔案:gvim.exe 的 gvim.pdb,或 vim.exe 的 vim.pdb。PDB 應該可以從你取得可執行檔的相同位置取得。請務必使用與 EXE 匹配的 PDB(日期相同)。
如果你使用 Microsoft Visual C++ 編譯器自行建置可執行檔,則 PDB 會與 EXE 一起建置。
如果你有 Visual Studio,請使用它而不是 VC Toolkit 和 WinDbg。
對於其他編譯器,你應該始終使用相應的除錯器:用於 Cygwin 和 MinGW 編譯器的 gdb(參見上面的 debug-gcc)。
debug-vs2005
3.2 使用 Visual Studio 2005/Visual C++ 2005 Express 除錯 Vim 崩潰
首先啟動 vim.exe 或 gvim.exe,然後啟動 Visual Studio。(如果你沒有 Visual Studio,請按照 get-ms-debuggers 中的說明取得 Visual C++ 2005 Express Edition 的免費副本。)
在 [工具] 功能表中,按一下 [附加至處理序]。選擇 Vim 處理序。
在 Vim 中,重現崩潰。Visual Studio 中會出現一個對話方塊,告訴你 Vim 處理序中發生了未處理的例外狀況。按一下 [中斷] 以中斷處理序。
Visual Studio 會彈出另一個對話方塊,告訴你未載入符號,且無法顯示原始碼。按一下 [確定]。
會開啟幾個視窗。在 [呼叫堆疊] 視窗中按一下滑鼠右鍵。選擇 [載入符號]。[尋找符號] 對話方塊將會開啟,尋找 (g)vim.pdb。導覽至你擁有 PDB 檔案的目錄,然後按一下 [開啟]。
此時,你應該會看到一個完整的呼叫堆疊,其中包含 vim 函式名稱和行號。按兩下其中一行,[尋找原始碼] 對話方塊將會出現。導覽至 Vim 原始碼所在的目錄(如果你有的話)。
如果你不知道如何進一步除錯,請按照 ":help bug-report" 中的說明進行操作。將呼叫堆疊貼到錯誤回報中。
如果你有非免費版本的 Visual Studio,你可以透過 [除錯] 功能表儲存小型傾印,並將其與錯誤回報一起傳送。小型傾印是一個小檔案 ( <100KB),其中包含有關你的處理序狀態的資訊。Visual C++ 2005 Express Edition 無法儲存小型傾印,而且無法安裝為即時除錯器。如果你需要儲存小型傾印,或你想要一個即時(事後)除錯器,請使用 WinDbg,debug-windbg
debug-windbg
3.3 使用 WinDbg 除錯 Vim 崩潰
請參閱 get-ms-debuggers 以取得 WinDbg 的副本。
與 Visual Studio IDE 一樣,你可以將 WinDbg 附加到正在執行的 Vim 處理序。你也可以讓你的系統自動將 WinDbg 作為事後除錯器來叫用。若要將 WinDbg 設定為你的事後除錯器,請執行 "windbg -I"。
若要將 WinDbg 附加到正在執行的 Vim 處理序,請啟動 WinDbg。在 [檔案] 功能表中,選擇 [附加至處理序]。選取 Vim 處理序,然後按一下 [確定]。
此時,請在 [檔案] 功能表上選擇 [符號檔案路徑],並將包含 Vim PDB 的資料夾新增至 sympath。如果你有可用的 Vim 原始碼,請在 [檔案] 功能表上使用 [原始碼檔案路徑]。你現在可以在 WinDbg 中開啟原始碼檔案並設定中斷點 (如果有的話)。重現你的崩潰。WinDbg 應該會在崩潰點開啟原始碼檔案。使用 [檢視] 功能表,你可以檢查呼叫堆疊、區域變數、監看式視窗等等。
如果 WinDbg 是你的事後除錯器,你不需要將 WinDbg 附加到你的 Vim 處理序。只需重現崩潰,WinDbg 就會自動啟動。如上所述,設定 [符號檔案路徑] 和 [原始碼檔案路徑]。
若要儲存小型傾印,請在 WinDbg 命令列輸入以下內容
.dump vim.dmp
debug-minidump
3.4 開啟小型傾印
如果你有小型傾印檔案,你可以在 Visual Studio 或 WinDbg 中開啟它。
在 Visual Studio 2005 中:在 [檔案] 功能表上,選擇 [開啟],然後選擇 [專案/方案]。導覽至 .dmp 檔案並開啟它。現在按 F5 以叫用除錯器。按照 debug-vs2005 中的說明設定 [符號檔案路徑]。
在 WinDbg 中:在 [檔案] 功能表上選擇 [開啟當機傾印]。按照 debug-windbg 中的說明設定 [符號檔案路徑]。
get-ms-debuggers
3.5 取得 Microsoft 除錯工具
Visual Studio 2017 Community Edition 可以從以下網址免費下載:https://visualstudio.microsoft.com/downloads/
主要
指令索引
快速參考