Documentation / The IDE
Debugging
Debug Java, Node.js, the browser, Python, Go, .NET and PL/SQL from one panel, with suggested configurations and debuggers that are installed only with your permission.
Yuli debugs each language with its reference debugger and shows everything in the same panel: stack, variables, evaluation console and breakpoints. Whatever is missing is installed only if you allow it.
| Language | Debugger | How Yuli starts it |
|---|---|---|
| Java and JVM | Native JDWP client | Launches or attaches to the JVM |
| Node.js | Chrome DevTools Protocol (CDP), with source maps | node --inspect or attach to a process |
| Browser | CDP in Chrome, Chromium or Edge | A separate profile, never yours |
| Python | debugpy (DAP) | python -m debugpy.adapter, with the project's virtual environment |
| Go | Delve (DAP) | dlv dap, or attach to a running dlv --headless |
| .NET | netcoredbg (DAP) | netcoredbg --interpreter=vscode |
| Oracle PL/SQL | Oracle's DBMS_DEBUG |
From the database panel |
Your first session
Debug configurations
The Debug configurations dialog opens from the Debug panel button or from the Run panel menu (Debug configurations…).
- Kinds: Java, Node.js, Python, Go, .NET and Browser.
- Modes: Launch (Yuli starts the program) or Attach (it connects to one that is already running).
- Saved: the ones you created. Suggested for this project: the ones Yuli finds in your code.
| Field | What for |
|---|---|
Program, Module (python -m), Main class |
What runs |
| Arguments, Working directory, Environment variables | How it runs |
| Interpreter, Build flags | The Python or the build flags to use |
| Just my code, Stop on entry | Where it stops |
| Host, Port, Process ID | What it attaches to |
| URL, Web root, Browser | Browser debugging |
What Yuli suggests
| Project | Suggestion |
|---|---|
| Python | main.py, app.py or manage.py (the latter with runserver --noreload), and "Python: attach 5678" |
| Go | "Go: ." when there is a go.mod |
| .NET | The project file |
| Node.js | The main of package.json |
| Browser | When the project uses vite, react-scripts, next, Angular, vue or svelte. The URL uses port 5173 with vite, 4200 with Angular and 3000 otherwise |
Configurations are saved in debug-configs.json, inside the working folder Yuli keeps for each project, not in your repository.
Attach to a process
In Attach mode, Yuli looks for what can be debugged on your machine: Node processes started with --inspect, Python, Go and .NET processes, JVMs with JDWP and browser tabs with DevTools. If there are none of a kind, it tells you; for example: "No Node process is listening with --inspect."
Java
- Native JDWP client, with a variable tree, inline values over the code and readable values (an object as
Owner{id=3, …}, a date as2026-10-15, a collection with its size). - Conditional, hit-count, exception breakpoints and logpoints.
- Hot swap (
Ctrl+Alt+F10): recompiles with the project's tool and redefines the changed classes without restarting the session.
The expression evaluator
It is used in the evaluation console, in watches, in breakpoint conditions and in logpoint messages.
| Supported | Not supported |
|---|---|
?: || && | ^ & == != < > <= >= instanceof << >> >>> + - * / % |
new |
Unary + - ! ~ and casts |
Assignments, ++ and -- |
Member access, method calls and indexes [i] |
Lambdas |
Method calls run real code in the JVM you are debugging. Avoid methods that change state.
Breakpoint properties
In Breakpoint properties you set how each one behaves:
- Condition: a Java expression; it suspends only when it's true.
- Hit count: it stops on that pass through the line.
- Log only with Message: writes to the console without stopping.
If a condition cannot be evaluated, the debugger does not ignore it silently: it stops once and shows why, for example "[condition] «total > limit» (line 42) could not be evaluated: …".
Node.js and the browser
- Source maps (v3): you set the breakpoint in your
.ts,.tsxor original source, and Yuli moves it to the generated code. When paused, the stack shows your files again. - Attach: to any Node process listening with
--inspect. - Browser: Yuli opens Chrome, Chromium or Edge with a separate profile (
--user-data-dir) and the remote debugging port. Your normal profile, with its sessions and extensions, is never touched. - Hot swap does not apply to source-mapped code: use the dev server's hot reload.
Python, Go and .NET
All three use the DAP protocol. Python uses the project's virtual environment (VIRTUAL_ENV first, then python3 or python). Go can launch dlv dap or attach to a dlv --headless you already have running. In the editor, the ▶ in the margin also offers to debug Python's if __name__ == "__main__":, Go's func main and func TestX, and C#'s static void Main(.
Installing the debugger
If the debugger is missing, "The … debugger is missing" appears with what Yuli is going to do, and the Install and debug and Cancel buttons.
Yuli installs debugpy with pip into the project's Python environment (or with --user if you use the system Python):
pip install debugpyYuli builds and installs Delve with your Go into its managed tools (Delve publishes no binaries). If the latest Delve needs a newer Go, it uses the newest one compatible with yours.
go install github.com/go-delve/delve/cmd/dlv@latestIt is installed in <runtimes>/delve/bin (Yuli's runtimes folder; see Language servers and build).
Yuli downloads netcoredbg (MIT licence) from github.com/Samsung/netcoredbg/releases/latest and keeps it in <runtimes>/netcoredbg.
There are builds for Windows x64, Linux x64 and arm64, and macOS (the x64 one, which runs under Rosetta on Apple Silicon). On other platforms Yuli tells you it is not available.
Starting a session never installs anything on its own. Nothing is downloaded or run without your permission; if the installation fails, the log stays visible in the same prompt.
PL/SQL
Yuli debugs Oracle procedures, functions and packages with DBMS_DEBUG.
- The account needs
DEBUG CONNECT SESSIONandDEBUGon the object (orDEBUG ANY PROCEDURE). - Yuli recompiles the object with
COMPILE DEBUG. - Keys:
F5continue,F10step over,F11step into andShift+F11step out.
Shortcuts
| Action | Shortcut |
|---|---|
| Debug the last configuration | Shift+F9 |
| Continue | F9 |
| Step over | F8 |
| Step into, your code only | F7 |
| Force step into | Alt+Shift+F7 |
| Step out | Shift+F8 |
| Reload changed classes (hot swap) | Ctrl+Alt+F10 |
With the AI
When a test or a step fails, Ask the AI for the cause appears in the Debug panel, in the Test Explorer and in the verification of AI changes. The button prepares the context (the error, the stack, the code) and leaves it in the chat: it does not send it; you decide what to ask.
See also Run and debug and Language servers and build.