Debugging
Genexy debugs Go, Java and Kotlin programs through the Debug Adapter Protocol. You start a run configuration under the debugger, stop at breakpoints, step through the code and inspect variables, all inside the IDE. Debugging is free and needs no account.
Supported languages
| Language | Adapter | Run configurations | Installed from |
|---|---|---|---|
| Go | Delve 1.27.2 | Go | go install, needs the Go toolchain on PATH |
| Java | java-debug 0.53.1 (in JDT.LS) | Maven, Gradle | Maven Central, SHA-256 verified |
| Kotlin | kotlin-debug-adapter 0.4.4 | Maven, Gradle | GitHub release, SHA-256 verified |
Each adapter is pinned to the version above. When one is missing, the Debug panel says so and offers
Install <version>; it goes into ~/.genexy/debug. Java debugging runs inside the Java language server, so it
needs the same JDK as code intelligence; Kotlin needs a JDK on JAVA_HOME or PATH.
Debugging is a desktop feature: the adapters are separate processes. On Android, iOS and in a browser the Debug panel shows “Debugging is available in the desktop app.”
Start a session
Choose the run configuration in the title bar and press the bug next to Run, or F5.
The rail icon carries a dot while a session is alive: yellow when it is paused, green when it is running. A floating toolbar with Continue, Step Over, Step Into, Step Out, Restart and Stop appears over the editor and can be dragged out of the way.
Go configurations debug in three modes: debug builds and runs the package, test debugs go test (optionally
only the tests matching -test.run), and exec runs a prebuilt binary. Java and Kotlin start the program, then
attach to it over JDWP; Genexy adds the debug agent for spring-boot:run, quarkus:dev, Maven tests, exec:java and
Gradle bootRun / run / test automatically.
The Debug panel
The panel opens in the bottom dock, like the terminal. Its header shows the session and its state, such as “Paused on breakpoint” or “Paused on exception”, with Continue/Pause, the steps, Evaluate, Restart and Stop.
The views are separate panes side by side, each with tabs; drag the dividers to resize them. A wide panel shows three panes (Frames · Breakpoints | Variables · Watch | Console), a narrower one two, a narrow one a single pane with all tabs. When the program stops, Variables and Frames come to the front.
| Tab | What it shows |
|---|---|
| Frames | Threads or goroutines and their frames; runs of library frames fold into one row. Above them, every session when more than one is running |
| Variables | The scopes of the selected frame, with a filter and a hexadecimal toggle |
| Watch | Expressions re-evaluated at every stop |
| Breakpoints | All breakpoints and the exception filters of the adapter, with add, deactivate and remove |
| Console | The program’s output and the adapter’s messages, with an expression prompt |
In the Console, stdout, stderr and the adapter’s messages can each be filtered out. Its prompt evaluates
expressions in the selected frame; Shift+Enter adds a line, and file:line references in the output are links.
While the program is paused, the editor marks the current line (red for a breakpoint hit, yellow after a step, green for
a selected caller frame), shows the values of nearby variables inline, and hovering a symbol shows its value.
Evaluate Expression (Alt+F8) opens a dialog for longer expressions with a history; Add to Watch keeps one.
An expression you evaluate runs inside the program. Calling a method or assigning a variable changes the program’s state, exactly as if the code had done it.
Breakpoints
Click the editor gutter or press F9 to toggle a breakpoint on a line. Ctrl+click disables or enables one, and
Shift+click opens the breakpoint editor. The gutter menu adds Add Conditional Breakpoint…, Add Logpoint…,
Add Hit Count Breakpoint…, Add Temporary Breakpoint, and, while paused, Run to Here.
| Kind | Gutter | Behaviour |
|---|---|---|
| Line | red dot | Stops every time |
| Conditional | red diamond | Stops when the expression is true, for example order.total > 1000 |
| Hit count | red diamond | Stops on a given hit: 5, ≥ 10, > 3 or every 3 |
| Logpoint | hollow diamond | Logs a message without stopping; {expression} in braces is evaluated |
| Temporary | dot with a centre | Removed after the first hit (Remove once hit) |
| Function | ƒ | Stops when a function is entered, for example main.handleLogin |
A hollow red ring means the adapter could not bind the breakpoint yet; the why? link explains it. Breakpoints move
with your edits, and Ctrl+F8 deactivates all of them at once without deleting any. Where an adapter has no native
support for a kind, Genexy evaluates it itself at each hit and says so in the editor.
Keys
Debug
| Shortcut | Action |
|---|---|
| F5 | Start debugging / continue |
| Shift+F5 | Stop / disconnect |
| Ctrl+Shift+F5 | Restart debugging |
| F6 | Pause |
| F10 | Step over |
| F11 | Step into (full screen when no thread is paused) |
| Shift+F11 | Step out |
| F9 | Toggle breakpoint |
| Ctrl+F10 | Run to cursor |
| Ctrl+F8 | Deactivate / activate breakpoints |
| Alt+F8 | Evaluate expression |
The IntelliJ IDEA keymap preset in Settings uses that IDE’s keys instead (Shift+F9 to debug, F8 to step over,
F7 to step into).
Configuration
Debug options live in the run configuration, in its debug section:
- Go (Delve): program, mode (debug, test, exec), only tests matching, arguments, build flags such as
-tags=dev, stop on entry, show package variables. - Java / Kotlin: the debug agent (automatic from the command, or a specific one), JVM arguments, project name, and Wait for the debugger before starting, which is the default for tests.
Debugging other tools is not supported yet; the section says so for them.
From AI
Your AI can drive the debugger through the Genexy MCP tools: list debuggable configurations, set breakpoints and logpoints, start a session, wait for a stop, read the stack and variables, evaluate expressions, step and stop. The breakpoints it sets are marked AI in the Breakpoints list, and it uses the same session you see in the panel. See AI Chat.