Closed8

NeovimでPHPをDebug

gzgz

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"
gzgz

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,
}
gzgz

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

gzgz

nvimで、<leader>dcで、"Listen for Xdebug"を選択したら、debug開始。

phpファイルを開いて、<leader>dbでBreakPointを設置

ウェブページを表示したら、止めてくれたことを確認。

<leader>dで他のdebugキーを確認できます。

以上です。

このスクラップは2ヶ月前にクローズされました