Debugging

When running .java scripts with jbang you can pass the --debug-flag and the script will enable debug, suspend the execution and wait until you connect a debugger to port 4004.

jbang --debug helloworld.java
Listening for transport dt_socket at address: 4004

You can change the debug port and host by passing in a interface pattern and number to the debug argument, e.g., --debug=*:4321.

This will make it use port 4321 and make it listen on all ('*') network interfaces.

Be sure to put a breakpoint in your IDE/debugger before you connect to make the debugger actually stop when you need it.

Additionally you can pass in a additional key/value options to the debug string, e.g., --debug=server=n,suspend=y. To have the debugger connect to the IDE and suspend the execution when it connects as opposed to having the IDE connect.

You can see the key/value options supported in OpenJDK JPDA documentation.

Debug info

JBang since version 0.100 compiles with debug info enabled by default. You can use -C=-g to tweak how much debug info is included: jbang -C=-g=lines,vars,source or to turn it off use `jbang -C=-g=none".

Debug jbang itself

Java itself will add JAVA_TOOL_OPTIONS which will apply to jbang too.

For finer and more explicit control the scripts, jbang will add JBANG_JAVA_OPTIONS to the call to jbang itself. Thus if you want to enable debug or other details for jbang set that environment variable.

Example that will enable debug on port 1044 and wait/suspend for debugger to connect:

JBANG_JAVA_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044 jbang env@jbangdev