Debugging a CorDapp

There are several ways to debug your CorDapp.

Using a MockNetwork

You can attach the IntelliJ IDEA debugger to a MockNetwork to debug your CorDapp:

  • Define your flow tests as per API: Testing>

    • In your MockNetwork, ensure that threadPerNode is set to false
  • Set your breakpoints

  • Run the flow tests using the debugger. When the tests hit a breakpoint, execution will pause

Using the node driver

You can also attach the IntelliJ IDEA debugger to nodes running via the node driver to debug your CorDapp.

With the nodes in-process

  • Define a network using the node driver as per Integration testing>

  • In your DriverParameters, ensure that startNodesInProcess is set to true

  • Run the driver using the debugger

  • Set your breakpoints

  • Interact with your nodes. When execution hits a breakpoint, execution will pause>

  • The nodes’ webservers always run in a separate process, and cannot be attached to by the debugger

With remote debugging

  • Define a network using the node driver as per Integration testing>

  • In your DriverParameters, ensure that startNodesInProcess is set to false and isDebug is set to true

  • Run the driver. The remote debug ports for each node will be automatically generated and printed to the terminal. For example:

[INFO ] 11:39:55,471 [driver-pool-thread-0] (DriverDSLImpl.kt:814) internal.DriverDSLImpl.startOutOfProcessNode -
    Starting out-of-process Node PartyA, debug port is 5008, jolokia monitoring port is not enabled {}
  • Attach the debugger to the node of interest on its debug port:>

  • In IntelliJ IDEA, create a new run/debug configuration of type Remote

  • Set the run/debug configuration’s Port to the debug port

  • Start the run/debug configuration in debug mode

  • Set your breakpoints

  • Interact with your node. When execution hits a breakpoint, execution will pause>

  • The nodes’ webservers always run in a separate process, and cannot be attached to by the debugger

By enabling remote debugging on a node

See Enabling remote debugging.