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

0 of 7 done

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 as 2026-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, .tsx or 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):

bash
pip install debugpy

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 SESSION and DEBUG on the object (or DEBUG ANY PROCEDURE).
  • Yuli recompiles the object with COMPILE DEBUG.
  • Keys: F5 continue, F10 step over, F11 step into and Shift+F11 step 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.