开源项目展示 LLM 自动操作调试器进行问题诊断,扩展 AI 编程助手的开发工具链能力。
LLM Debugger 是一个 VSCode 扩展,用于展示如何利用大语言模型(LLM)主动调试程序。本项目是作为研究实验开发的概念验证,不会得到积极维护或进一步开发。
传统的 LLM 调试方法只分析静态源代码。LLM Debugger 则会为 LLM 提供实时的运行时上下文,包括:
运行时变量值:观察程序执行过程中变量的实际状态。
函数行为:跟踪函数如何被调用、返回了什么值,以及函数之间如何交互。
分支决策:了解程序执行时选择了哪些代码路径。
这些更丰富的上下文让 LLM 能够更快、更准确地诊断 bug。该扩展还可以通过运行代码并捕获静态源代码之外的执行细节来生成合成数据,从而提供有关程序行为的独特洞察。
graph TB
subgraph "VSCode Editor"
User[User] --> Editor[VSCode Editor]
Editor --> DebugSession((Debug Session))
end
subgraph "LLM Debugger Extension"
DebugSession --> DebugAdapter[Debug Adapter Tracker]:::extensionComponent
DebugAdapter --> DebugSession
DebugAdapter -- Debug State --> LLMClient[LLM Client]:::extensionComponent
LLMClient -- Function Calls --> DebugAdapter
end
subgraph "External Services"
LLMClient --- LLM[Large Language Model]
end
DebugSession -- Debug Protocol --> NodeDebugAdapter[Node.js Debug Adapter]
NodeDebugAdapter -- Executes --> NodeApp[Node.js Application]
NodeApp -- Runtime Events --> NodeDebugAdapter
主动调试:将实时调试信息(变量、堆栈跟踪、断点)整合到 LLM 的上下文中。
自动化断点管理:根据代码分析和 LLM 的建议自动设置初始断点。
运行时检查:监控异常、线程暂停等事件,收集详细的运行时状态,为调试提供指引。
调试操作:支持常见的调试操作,例如单步跳过(next)、单步进入(stepIn)、单步跳出(stepOut)以及继续执行(continue)。
合成数据生成:捕获有价值的执行细节,生成超出静态代码分析范围的数据。
集成式 UI:在 Run and Debug 视图中提供侧边栏面板,可用于开关 AI 调试,并查看 LLM 的实时建议和结果。
启动 LLM 调试会话:
命令:llm-debugger.startLLMDebug
说明:启动一个 AI 辅助的调试会话。启用后,该扩展会为 Node.js 会话配置调试环境,并开始收集运行时数据供 LLM 分析。
启动 LLM 调试会话:
命令:llm-debugger.startLLMDebug
说明:启动一个 AI 辅助的调试会话。启用后,该扩展会为 Node.js 会话配置调试环境,并开始收集运行时数据供 LLM 分析。
侧边栏面板:
位置:Run and Debug 视图
ID:llmDebuggerPanel
说明:显示 AI 调试会话的当前状态。你可以通过控制面板开关「Debug with AI」模式。面板会展示实时调试洞察、LLM 函数调用以及最终的调试结果。
位置:Run and Debug 视图
说明:显示 AI 调试会话的当前状态。你可以通过控制面板开关「Debug with AI」模式。面板会展示实时调试洞察、LLM 函数调用以及最终的调试结果。
Debug Configuration Provider 与 Debug Adapter Tracker:自动集成到 Node.js 调试会话中。它会读取工作区状态标志 llmDebuggerEnabled,将 LLM 上下文注入会话,并自动设置断点和处理调试事件(例如异常和线程暂停)。它还支持由 LLM 引导的常见操作命令,例如 next、stepIn、stepOut 和 continue。
Debug Configuration Provider 与 Debug Adapter Tracker:
自动集成到 Node.js 调试会话中。
通过读取工作区状态标志 llmDebuggerEnabled,将 LLM 上下文注入会话,并自动设置断点和处理调试事件(例如异常和线程暂停)。
支持由 LLM 引导的常见操作命令,例如 next、stepIn、stepOut 和 continue。
该扩展会在工作区状态中保存唯一一个配置标志(llmDebuggerEnabled)。这个标志决定是否启用 AI 辅助调试。你可以通过侧边栏面板开关此选项。Settings UI 中没有提供其他设置。
会话初始化:启动 Node.js 调试会话(或使用命令 llm-debugger.startLLMDebug)时,该扩展会被激活,并将其 Debug Adapter Tracker 附加到会话中。
会话初始化:启动 Node.js 调试会话(或使用命令 llm-debugger.startLLMDebug)时,该扩展会被激活,并将其 Debug Adapter Tracker 附加到会话中。
断点管理:该扩展会根据对工作区代码的分析自动设置初始断点。随后,它会监控运行时事件,并根据需要调整断点或触发 LLM 操作。
断点管理:该扩展会根据对工作区代码的分析自动设置初始断点。随后,它会监控运行时事件,并根据需要调整断点或触发 LLM 操作。
运行时检查:随着调试会话的推进,该扩展会收集实时数据,包括变量值、堆栈跟踪以及输出(stderr/stdout)。这些数据会被发送给 LLM,用于确定接下来的调试步骤。
运行时检查:随着调试会话的推进,该扩展会收集实时数据,包括变量值、堆栈跟踪以及输出(stderr/stdout)。这些数据会被发送给 LLM,用于确定接下来的调试步骤。
LLM 引导与操作执行:LLM 会处理结合了静态信息和运行时信息的上下文,建议单步执行代码、修改断点等操作。这些操作会自动执行,从而简化调试流程。
LLM 引导与操作执行:LLM 会处理结合了静态信息和运行时信息的上下文,建议单步执行代码、修改断点等操作。这些操作会自动执行,从而简化调试流程。
会话终止:调试会话结束时(无论是正常结束还是因异常终止),该扩展都会收集最终的运行时数据,并根据 LLM 的分析生成一份包含代码修复方案和解释的总结。
会话终止:调试会话结束时(无论是正常结束还是因异常终止),该扩展都会收集最终的运行时数据,并根据 LLM 的分析生成一份包含代码修复方案和解释的总结。
你可以使用 VSCode 的「Install from VSIX」功能安装 LLM Debugger:
构建扩展包:在项目根目录中运行以下命令来构建扩展:npm run build
构建扩展包:
在项目根目录中运行以下命令来构建扩展:npm run build
npm run build
在 VSCode 中安装扩展:打开 VSCode。按 Ctrl+Shift+P(macOS 上为 Cmd+Shift+P)打开 Command Palette。输入并选择「Extensions: Install from from location...」。浏览并选择此代码仓库所在的目录。如果出现提示,请重新加载 VSCode。
在 VSCode 中安装扩展:
按 Ctrl+Shift+P(macOS 上为 Cmd+Shift+P)打开 Command Palette。
输入并选择「Extensions: Install from from location...」。
浏览并选择此代码仓库所在的目录。
如果出现提示,请重新加载 VSCode。
或者,如果你更希望在开发过程中直接从源代码加载扩展:
在 VSCode 中打开项目文件夹。
运行「Debug: Start Debugging」命令,启动一个新的 Extension Development Host。
更快地解决 bug:将运行时状态与静态代码结合起来,可以让 LLM 全面了解程序,从而更快地定位问题根因。
更快地解决 bug:将运行时状态与静态代码结合起来,可以让 LLM 全面了解程序,从而更快地定位问题根因。
增强调试工作流:开发者可以获得由 AI 驱动的实时洞察,从而更好地理解复杂代码库,并更高效地处理调试任务。
增强调试工作流:开发者可以获得由 AI 驱动的实时洞察,从而更好地理解复杂代码库,并更高效地处理调试任务。
研究与数据生成:该工具可以生成用于研究的合成运行时数据,从静态分析无法覆盖的角度揭示程序行为。
研究与数据生成:该工具可以生成用于研究的合成运行时数据,从静态分析无法覆盖的角度揭示程序行为。
LLM Debugger 是一个实验性项目,展示了将实时调试数据与 LLM 能力相结合,如何为传统调试实践带来革命性的改变。