調(diào)試完全指南:兩行配置接入 Neovim DAP)
LazyVim 斷點(diǎn)調(diào)試完全指南兩行配置接入 Neovim DAP【免費(fèi)下載鏈接】LazyVimNeovim config for the lazy項(xiàng)目地址: https://gitcode.com/GitHub_Trending/la/LazyVim你改完一段 Lua 配置重載后發(fā)現(xiàn)輸出不對(duì)某個(gè)變量中途變成了 nil卻找不到它從哪一步開(kāi)始出錯(cuò)。LazyVim 斷點(diǎn)調(diào)試正是為這類場(chǎng)景準(zhǔn)備的——讓代碼停在指定行直接查看此時(shí)的變量值和調(diào)用鏈。照著做一遍你能獨(dú)立跑通一次完整調(diào)試再掌握條件斷點(diǎn)、日志斷點(diǎn)兩個(gè)進(jìn)階技巧。啟用 DAP 的兩行配置LazyVim 的調(diào)試擴(kuò)展構(gòu)建在nvim-dap之上它負(fù)責(zé)與調(diào)試器通信nvim-dap-ui提供圖形化面板nvim-dap-virtual-text把變量值直接渲染在代碼行上。三者都已預(yù)置你只需在自己的 lazy 配置里加兩行 import{ import lazyvim.plugins.extras.dap.core }, { import lazyvim.plugins.extras.dap.nlua },第二行帶來(lái) Lua 調(diào)試支持。調(diào)試器本體交給 Mason 按需安裝例如:MasonInstall codelldb node-debug2-adapter。nlua擴(kuò)展自帶兩種模式文件內(nèi)調(diào)試會(huì)先拉起調(diào)試服務(wù)器再附加到當(dāng)前 Neovim遠(yuǎn)程附加則連接一個(gè)已在運(yùn)行、監(jiān)聽(tīng) 8086 端口的 Neovim 實(shí)例。第一次跑通斷點(diǎn)調(diào)試設(shè)斷點(diǎn)、啟動(dòng)、認(rèn)面板打開(kāi)要調(diào)試的 Lua 文件光標(biāo)停在目標(biāo)行按leaderdb行首出現(xiàn)斷點(diǎn)圖標(biāo)即設(shè)置成功。接著在命令模式啟動(dòng)會(huì)話:lua require(dap).run({ type nlua, request attach, name Run this file })程序會(huì)在第一個(gè)斷點(diǎn)停下DAP UI 隨之自動(dòng)打開(kāi)調(diào)試結(jié)束時(shí)自動(dòng)關(guān)閉。四個(gè)調(diào)試面板分別看什么變量左上當(dāng)前作用域的局部變量與全局變量。調(diào)用棧右上代碼是怎么一層層調(diào)用到這里的。斷點(diǎn)列表左下本會(huì)話設(shè)置過(guò)的全部斷點(diǎn)點(diǎn)一下可跳轉(zhuǎn)??刂婆_(tái)右下交互式終端可以直接敲調(diào)試命令。停在斷點(diǎn)后用單步走到可疑處。LazyVim 給 DAP 預(yù)設(shè)了全套快捷鍵前綴統(tǒng)一是leaderd按用途分四組分組快捷鍵作用設(shè)置斷點(diǎn)leaderdb在光標(biāo)行切換斷點(diǎn)設(shè)置斷點(diǎn)leaderdB設(shè)條件斷點(diǎn)會(huì)彈出條件輸入框單步leaderdc繼續(xù)執(zhí)行直到下一個(gè)斷點(diǎn)單步leaderdi步入當(dāng)前函數(shù)內(nèi)部單步leaderdO跳過(guò)當(dāng)前行單步leaderdo步出當(dāng)前函數(shù)查看leaderdu開(kāi)關(guān)調(diào)試面板查看leaderde求值變量normal 與 visual 模式均可用停止leaderdt結(jié)束本次調(diào)試會(huì)話走到一半想看某個(gè)表達(dá)式選中它按leaderde即可。變量值也會(huì)以虛擬文本形式掛在代碼行旁不用來(lái)回切面板。進(jìn)階斷點(diǎn)技巧條件、日志與一次性條件斷點(diǎn)——只想在循環(huán)的某一輪停下時(shí)用。按leaderdB輸入條件如i 5滿足才命中。日志斷點(diǎn)——想記錄變量值、又不想打斷程序時(shí)用。在斷點(diǎn)處掛一條格式化消息程序經(jīng)過(guò)時(shí)把值打印出來(lái)require(dap).set_breakpoint(nil, nil, user id: ${user.id})一次性斷點(diǎn)——只想看某行一次狀態(tài)時(shí)最省事觸發(fā)一次后自動(dòng)移除。想再加一條自己的調(diào)試配置可以寫(xiě)進(jìn)lua/plugins/dap.lua比如把遠(yuǎn)程附加改到 8087 端口return { mfussenegger/nvim-dap, config function() require(dap).configurations.lua { { type nlua, request attach, name Debug LazyVim config, port 8087 }, } end, }注意type寫(xiě)nlua寫(xiě)成lua調(diào)試器不會(huì)啟動(dòng)。調(diào)試面板布局與快捷鍵定制兩處定制最常用都在你自己的配置目錄里完成。默認(rèn)的左右布局不合意時(shí)在lua/plugins/dap.lua里覆蓋nvim-dap-ui的optsreturn { rcarriga/nvim-dap-ui, opts { layouts { { elements { scopes, breakpoints }, size 40, position left }, { elements { repl, console }, size 10, position bottom }, }, }, }習(xí)慣 VS Code 鍵位的朋友可以在lua/config/keymaps.lua里加兩行映射vim.keymap.set(n, F5, leaderdc, { desc DAP Continue }) vim.keymap.set(n, F10, leaderdO, { desc DAP Step Over })斷點(diǎn)不觸發(fā)時(shí)先查這 3 處現(xiàn)象先查什么調(diào)試器無(wú)法啟動(dòng)在Mason里確認(rèn)對(duì)應(yīng)語(yǔ)言的調(diào)試器已安裝配置里type是否寫(xiě)成nlua而不是lua斷點(diǎn)不觸發(fā)文件路徑是否含中文或特殊字符調(diào)試器與解釋器版本是否匹配如 Python 3.11 需要對(duì)應(yīng)版本的 debugpy變量顯示不全在 DAP UI 里按K展開(kāi)復(fù)合變量虛擬文本嵌套太淺時(shí)把depth調(diào)大如{ theHamsta/nvim-dap-virtual-text, opts { depth 3 } }跑通之后還有幾個(gè)方向可以走給項(xiàng)目配 launch.json 管理項(xiàng)目級(jí)調(diào)試配置LazyVim 的 DAP 核心擴(kuò)展 已內(nèi)置對(duì)它的解碼支持用 neotest 直接調(diào)試測(cè)試用例或運(yùn)行dap.repl.open()打開(kāi)交互終端探索更多調(diào)試命令。更多細(xì)節(jié)可查 doc/LazyVim.txt 與 nlua 擴(kuò)展。【免費(fèi)下載鏈接】LazyVimNeovim config for the lazy項(xiàng)目地址: https://gitcode.com/GitHub_Trending/la/LazyVim創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考