Nvim 的 :help
頁面,從 來源 使用 tree-sitter-vimdoc 解析器產生。
ulimit -c unlimited
coredumpctl -1 gdb
coredumpctl
是一個可選工具,您可能需要安裝它sudo apt install systemd-coredump
backtrace.txt
檔案寄給我們2>&1 coredumpctl -1 gdb | tee -a backtrace.txt
(gdb) thread apply all bt full
coredumpctl
的系統上,您可能會在目前目錄或其他位置找到 core
傾印檔案。在已安裝 apport
的 Linux 系統(例如 Ubuntu)上,儲存核心傾印檔案的目錄可能是 /var/lib/apport/coredump
或其他位置,具體取決於系統設定(請參閱 /proc/sys/kernel/core_pattern
)。另請參閱:https://stackoverflow.com/a/18368068./core
傾印檔案取得回溯追蹤gdb build/bin/nvim ./core 2>&1 | tee backtrace.txt
(gdb) thread apply all bt full
nvim
當機,您可以在 Console.app
中看到回溯追蹤(在較舊的 macOS 版本中,位於「當機報告」或「使用者診斷報告」下)。open -a Console
/cores/
目錄存在且可寫入sudo mkdir /cores
sudo chown root:admin /cores
sudo chmod 1775 /cores
unlimited
ulimit -c unlimited
~/.bashrc
或類似的檔案)。lldb
中開啟核心檔案lldb -c /cores/core.12345
/etc/launchd.conf
啟用核心傾印)。TEST_TAG
來執行符合 busted 標籤的測試(形式為 #foo
,例如 it("test #foo ...", ...)
)GDB=1 TEST_TAG=foo make functionaltest
gdb build/bin/nvim
(gdb) target remote localhost:7777
-- 請參閱 https://github.com/neovim/neovim/blob/master/test/functional/testnvim.lua 中的 nvim_argv
。lldb .deps/usr/bin/luajit -- .deps/usr/bin/busted --lpath="./build/?.lua" test/unit/
nvim
程序(提示:可以透過呼叫 getpid() 取得執行中 Nvim 實例的 pid),例如gdb -tui -p 1234 build/bin/nvim
gdb
互動式提示。您可以隨時執行break foo
在 foo()
函數上設定中斷點n
單步執行下一個陳述式<Enter>
重複上一個命令s
單步進入下一個陳述式c
繼續finish
單步跳出目前的函數p zub
列印 zub
的值bt
從目前位置查看回溯追蹤(呼叫堆疊)CTRL-x CTRL-a
或 tui enable
顯示目前除錯內容中原始碼檔案的 TUI 檢視。這非常有用,因為它避免了對 gdb「前端」的需求。<up>
和 <down>
捲動原始碼檔案檢視set record full insn-number-max unlimited
continue
一下(至少直到 main()
執行)record
revert-next
、reverse-step
等來倒轉除錯器gdb
用戶端連線到同一個執行中的 nvim
程序,或者您可能想要使用本機 gdb
連線到遠端 nvim
程序。使用 gdbserver
,您可以附加到單一程序並從多個 gdb
用戶端控制它。nvim
的 gdbserver
,如下所示gdbserver :6666 build/bin/nvim 2> gdbserver.log
gdbserver
現在正在埠 6666 上接聽。然後您需要在另一個終端機中附加到此除錯工作階段gdb build/bin/nvim
gdb
,您需要附加到遠端工作階段(gdb) target remote localhost:6666
signal (SIGTTOU, SIG_IGN);
if (!tcsetpgrp(data->input.in_fd, getpid())) {
perror("tcsetpgrp failed");
}
tui.c:terminfo_start
。gdbserver
方法的除錯工作階段。當您鍵入 make debug
時,此範例 local.mk
將會建立除錯工作階段。.PHONY: dbg-start dbg-attach debug build
build:
@$(MAKE) nvim
dbg-start: build
@tmux new-window -n 'dbg-neovim' 'gdbserver :6666 ./build/bin/nvim -D'
dbg-attach:
@tmux new-window -n 'dbg-cgdb' 'cgdb -x gdb_start.sh ./build/bin/nvim'
debug: dbg-start dbg-attach
gdb_start.sh
包含除錯器啟動時要呼叫的 gdb
命令。它需要附加到由 dbg-start
規則啟動的伺服器。例如(gdb) target remote localhost:6666 (gdb) br main