调试

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()。这些是不可避免的。字节数应该非常小,一个 KB 或更小。
3. Windows 错误报告 debug-win32
如果 Windows 版本的 Vim 以可重现的方式崩溃,您可以采取一些步骤来提供有用的错误报告。
3.1 通用
您必须获取可执行文件的调试符号(PDB)文件:gvim.pdb 用于 gvim.exe,或 vim.pdb 用于 vim.exe。PDB 应该与您获取可执行文件的位置相同。确保使用与 EXE 匹配的 PDB(相同日期)。
如果您使用 Microsoft Visual C++ 编译器自己构建了可执行文件,那么 PDB 将与 EXE 一起构建。
如果您拥有 Visual Studio,请使用它,而不是 VC Toolkit 和 WinDbg。
对于其他编译器,您应该始终使用相应的调试器:gdb(参见上面的 debug-gcc)用于 Cygwin 和 MinGW 编译器。
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 Debugging Tools
Visual Studio 2017 Community Edition 可以从以下网址免费下载:https://visualstudio.microsoft.com/downloads/
主要
命令索引
快速参考