You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mason.nvim配置Neovim的nvim-dap调试C++时遇退出码-1求助

问题描述

nvim-dap无法在Neovim环境中正常工作,启动调试后始终以退出码-1终止。已在多个可正常运行的程序上测试,程序本身无调试问题;终端中单独运行lldb正常,排除权限问题。希望通过mason-nvim-dap提升配置可移植性,当前相关配置如下:

插件安装配置

-- DAP Installs
{
    "rcarriga/nvim-dap-ui",
    event = "VeryLazy",
    dependencies = "mfussenegger/nvim-dap",
    config = function()
      local dap = require("dap")
      local dapui = require("dapui")
      dapui.setup()
      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
  },
  {
    "jay-babu/mason-nvim-dap.nvim",
    event = "VeryLazy",
    dependencies = {
      "williamboman/mason.nvim",
      "mfussenegger/nvim-dap",
    },
    opts = {
      handlers = {}
    },
  },
  {
    "mfussenegger/nvim-dap",
    vim.keymap.set('n', '<leader>Dc', ':lua require"dap".continue()<CR>', {desc = '[d]ebug [c]ontinue'}),
  },

DAP核心配置

-- DAP config
require("mason").setup()
require("mason-nvim-dap").setup({
  ensure_installed = {'codelldb'},
  automatic_installation = true,
})

调试输出信息

  • DAP-REPL控制台:

    Console is in 'commands' mode, prefix expressions with '?'.
    Launching: /Users/myname/Documents/code/400hw/ec3
    Launched process 15338
    Process exited with code -1.

  • DAP终端:

    [Process Exited 0]


排查与解决方案
  • 1. 补充codelldb调试适配器与语言配置
    mason-nvim-dap默认会注册codelldb适配器,但空handlers可能导致配置未生效。在DAP配置中添加以下代码,明确适配器路径与C/C++调试启动项:

    local dap = require("dap")
    -- 配置codelldb适配器
    dap.adapters.codelldb = {
      type = 'server',
      port = "${port}",
      executable = {
        command = vim.fn.stdpath("data") .. "/mason/packages/codelldb/extension/adapter/codelldb",
        args = {"--port", "${port}"},
      }
    }
    
    -- 配置C/C++调试启动规则
    dap.configurations.cpp = {
      {
        name = "Launch file",
        type = "codelldb",
        request = "launch",
        program = function()
          return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file')
        end,
        cwd = '${workspaceFolder}',
        stopOnEntry = false,
      },
    }
    -- 让C语言复用C++的调试配置
    dap.configurations.c = dap.configurations.cpp
    
  • 2. 确保编译时添加调试符号
    编译程序必须加上-g参数生成带调试信息的可执行文件,否则调试器无法附着。示例编译命令:

    gcc -g your_program.c -o your_program
    
  • 3. 验证codelldb安装状态
    运行:Mason命令,确认codelldb已成功安装。若安装失败,手动触发重新安装,或检查网络连接状态。

  • 4. 恢复DAP-UI的退出监听
    取消注释关闭UI的监听代码,避免UI状态异常干扰调试流程:

    dap.listeners.before.event_terminated["dapui_config"] = function()
      dapui.close()
    end
    dap.listeners.before.event_exited["dapui_config"] = function()
      dapui.close()
    end
    
  • 5. 检查codelldb可执行路径有效性
    手动执行以下命令,确认codelldb可正常启动:

    ~/.local/share/nvim/mason/packages/codelldb/extension/adapter/codelldb --version
    

    若路径不存在,说明mason安装失败,需重新安装codelldb。

内容的提问来源于stack exchange,提问作者justatoaster47

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:34:52