文档 / IDE

调试

在同一个面板中调试 Java、Node.js、浏览器、Python、Go、.NET 和 PL/SQL,提供建议的配置,调试器只在你允许时才会安装。

Yuli 用每种语言的标准调试器进行调试,并把一切显示在同一个面板中:调用栈、变量、求值控制台和断点。缺少的组件只有在你授权后才会安装。

语言 调试器 Yuli 如何启动它
Java 和 JVM 原生 JDWP 客户端 启动 JVM 或附加到 JVM
Node.js Chrome DevTools Protocol(CDP),支持 source maps node --inspect 或附加到进程
浏览器 Chrome、Chromium 或 Edge 中的 CDP 使用单独的配置文件,绝不使用你自己的
Python debugpy(DAP) python -m debugpy.adapter,使用项目的虚拟环境
Go Delve(DAP) dlv dap,或附加到正在运行的 dlv --headless
.NET netcoredbg(DAP) netcoredbg --interpreter=vscode
Oracle PL/SQL Oracle 的 DBMS_DEBUG 从数据库面板启动

你的第一次调试会话

已完成 0/7

调试配置

调试配置 对话框可以通过调试面板中的按钮打开,也可以从运行面板的菜单(调试配置…)打开。

  • 类型: Java、Node.js、Python、Go、.NET 和浏览器。
  • 模式: 启动(由 Yuli 启动程序)或 附加(连接到已在运行的程序)。
  • 已保存: 你自己创建的配置。为此项目建议的配置: Yuli 在你的代码中找到的配置。
字段 用途
程序、模块(python -m)、主类 运行什么
参数、工作目录、环境变量 如何运行
解释器、编译选项 使用哪个 Python 或哪些 build flags
仅我的代码、入口处暂停 在哪里暂停
主机、端口、进程 ID 附加到什么
URL、Web 根目录、浏览器 浏览器调试

Yuli 的建议

项目 建议
Python main.py、app.py 或 manage.py(后者带 runserver --noreload),以及“Python: attach 5678”
Go 如果存在 go.mod,则为“Go: .”
.NET 项目文件
Node.js package.json 中的 main
浏览器 如果项目使用 vite、react-scripts、next、Angular、vue 或 svelte。URL 在 vite 下使用端口 5173,在 Angular 下使用 4200,其余情况使用 3000

配置保存在 debug-configs.json 中,该文件位于 Yuli 为每个项目准备的工作文件夹里,而不在你的仓库中。

附加到进程

在 附加 模式下,Yuli 会在你的电脑上查找可以调试的对象:以 --inspect 启动的 Node 进程、Python、Go 和 .NET 进程、启用 JDWP 的 JVM,以及开启了 DevTools 的浏览器标签页。如果某种类型一个都没有,它会告诉你,例如:“没有以 --inspect 监听的 Node 进程。”

Java

  • 原生 JDWP 客户端,提供变量树、代码上方的内联值以及易读的值(对象显示为 Owner{id=3, …},日期显示为 2026-10-15,集合显示其大小)。
  • 条件断点、计数断点、logpoint 和异常断点。
  • 热替换(Ctrl+Alt+F10):用项目的构建工具重新编译,并在不重启会话的情况下重新定义已更改的类。

表达式求值器

它用于求值控制台、监视表达式、断点条件以及 logpoint 的消息。

支持 不支持
?: || && | ^ & == != < > <= >= instanceof << >> >>> + - * / % new
一元运算符 + - ! ~ 以及类型转换 赋值、++ 和 --
成员访问、方法调用和索引 [i] Lambda

方法调用会在你正在调试的 JVM 中执行真实代码。请避免调用会改变状态的方法。

断点属性

在 断点属性 中,你可以调整每个断点的行为:

  • 条件: 一个 Java 表达式;仅当其为真时才暂停。
  • 命中次数: 在第几次经过该行时暂停。
  • 仅记录 加 消息: 向控制台写入内容而不暂停。

如果某个条件无法求值,调试器 不会悄悄忽略它:它会暂停一次并显示原因,例如“[条件]“total > limite”(第 42 行)无法求值:…”。

Node.js 与浏览器

  • Source maps(v3): 你在 .ts、.tsx 或原始代码中设置断点,Yuli 会把它映射到生成的代码上。暂停时,调用栈中显示的仍是你的文件。
  • 附加: 可附加到任何以 --inspect 监听的 Node 进程。
  • 浏览器: Yuli 会用单独的配置文件(--user-data-dir)和远程调试端口打开 Chrome、Chromium 或 Edge。你平时的配置文件,包括会话和扩展,都不会受到影响。
  • 热替换不适用于带 source maps 的代码:请使用开发服务器的热重载。

Python、Go 与 .NET

这三者都使用 DAP 协议。Python 使用项目的虚拟环境(先找 VIRTUAL_ENV,再找 python3 或 python)。Go 可以启动 dlv dap,也可以附加到你已经在运行的 dlv --headless。在编辑器中,边栏的 ▶ 还可以调试 Python 的 if __name__ == "__main__":、Go 的 func main 和 func TestX,以及 C# 的 static void Main(。

安装调试器

如果缺少调试器,会出现 “缺少……的调试器” 提示,说明 Yuli 将要做什么,并提供 安装并调试 和 取消 按钮。

Yuli 会用 pip 把 debugpy 安装到项目的 Python 环境中(如果你使用系统 Python,则使用 --user):

bash
pip install debugpy

启动会话绝不会自行安装任何东西。未经你允许,不会下载或执行任何内容;如果安装失败,日志会直接显示在同一个提示中。

PL/SQL

Yuli 使用 DBMS_DEBUG 调试 Oracle 的存储过程、函数和包。

  • 账户需要 DEBUG CONNECT SESSION 权限以及对该对象的 DEBUG 权限(或 DEBUG ANY PROCEDURE)。
  • Yuli 会用 COMPILE DEBUG 重新编译该对象。
  • 按键:F5 继续,F10 下一行,F11 步入,Shift+F11 步出。

快捷键

操作 快捷键
调试上一个配置 Shift+F9
继续 F9
下一行(step over) F8
步入,仅你的代码(step into) F7
强制步入 Alt+Shift+F7
跳出方法 Shift+F8
重新加载已修改的类(热替换) Ctrl+Alt+F10

借助 AI

当某个测试或步骤失败时,询问 AI 原因 会出现在调试面板、测试资源管理器以及 AI 更改的验证中。该按钮会准备好上下文(错误、调用栈、代码)并放进聊天中:它不会发送;问什么由你决定。

另请参阅运行与调试和语言服务器与构建。