Closed8
NeovimでPHPをDebug

Neovimをインストール

LazyVIMをインストール

LazyExtrasのlang.phpをインストール
:LazyExtrasで、lang.phpの行に移動して、[x]を押す

LSP
lang.php、デフォルトでphpactorを使っているようで、intelephenseにします。
MasonでLSP: intelephenseをインストール
:Mason、intelephenseの行に移動して、[i]を押す
~/.config/nvim/lua/config/options.lua
-- Set to "intelephense" to use intelephense instead of phpactor.
vim.g.lazyvim_php_lsp = "intelephense"

Debug1:LazyExtrasのdap.coreをインストール

Debug2:Masonでphp-debug-adapteをインストール
9003を自分の環境に合わせて変更してください。
設定ファイル
~/.config/nvim/lua/plugins/dap.lua
return {
"mfussenegger/nvim-dap",
dependencies = {
"rcarriga/nvim-dap-ui", -- Optional: for a nice debug UI
"theHamsta/nvim-dap-virtual-text", -- Optional: show variable values inline
"jay-babu/mason-nvim-dap.nvim", -- Integrates Mason with DAP
},
config = function()
local dap = require("dap")
local dapui = require("dapui") -- If you're using nvim-dap-ui
-- Configure the PHP debug adapter
dap.adapters.php = {
type = "executable",
command = "node", -- The php-debug-adapter is a Node.js application
args = {
require("mason-registry").get_package("php-debug-adapter"):get_install_path()
.. "/extension/out/phpDebug.js",
},
}
-- Define debug configurations for PHP
dap.configurations.php = {
{
type = "php",
request = "launch",
name = "Launch currently open script",
program = "${file}",
cwd = "${workspaceFolder}",
runtimeExecutable = "php", -- Or the path to your PHP executable if not in PATH
},
{
type = "php",
request = "launch",
name = "Listen for Xdebug",
port = 9003, -- Ensure this matches xdebug.client_port in php.ini
-- pathMappings are crucial if your local project path differs from the server/container path
-- Example for Docker:
-- pathMappings = {
-- ["/var/www/html"] = "${workspaceFolder}",
-- ["/app"] = "${workspaceFolder}", -- Adjust to your container path
-- },
-- Example for Vagrant/VM:
-- pathMappings = {
-- ["/var/www/myproject"] = "${workspaceFolder}",
-- },
-- For purely local development, you often don't need pathMappings or they can be simple:
-- pathMappings = { ["${workspaceFolder}"] = "${workspaceFolder}" },
},
{
type = "php",
request = "attach",
name = "Attach to Xdebug",
port = 9003, -- Ensure this matches xdebug.client_port in php.ini
-- pathMappings = { ... }, -- Same as above
},
}
-- Keybindings (LazyVim often provides these, but you can customize)
vim.keymap.set("n", "<leader>dt", dapui.toggle, { desc = "Toggle Debug UI" })
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
vim.keymap.set("n", "<leader>dc", dap.continue, { desc = "Continue" })
vim.keymap.set("n", "<leader>dso", dap.step_over, { desc = "Step Over" })
vim.keymap.set("n", "<leader>dsi", dap.step_into, { desc = "Step Into" })
vim.keymap.set("n", "<leader>dsa", dap.step_out, { desc = "Step Out" })
vim.keymap.set("n", "<leader>dr", dap.repl.toggle, { desc = "Toggle REPL" })
vim.keymap.set("n", "<leader>dl", dap.run_last, { desc = "Run Last Debug Session" })
vim.keymap.set("n", "<leader>dS", dap.terminate, { desc = "Stop Debugging" })
vim.keymap.set("n", "<leader>dC", dap.clear_breakpoints, { desc = "Clear All Breakpoints" })
vim.keymap.set("n", "<leader>de", dap.set_exception_breakpoints, { desc = "Set Exception Breakpoints" })
vim.keymap.set("n", "<leader>di", dapui.eval, { desc = "Evaluate Expression" })
-- Optional: Setup nvim-dap-ui
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open({})
end
dap.listeners.before.event_terminated["dapui_config"] = function()
dapui.close({})
end
dap.listeners.before.event_exited["dapui_config"] = function()
dapui.close({})
end
end,
}

PHP側でXdebugのインストールと設定、ポートは上の9003に合わせる。

nvimで、<leader>dcで、"Listen for Xdebug"を選択したら、debug開始。
phpファイルを開いて、<leader>dbでBreakPointを設置
ウェブページを表示したら、止めてくれたことを確認。
<leader>dで他のdebugキーを確認できます。
以上です。
このスクラップは2ヶ月前にクローズされました