Debugging CorDapp

使用 MockNetwork

你可以把 IntelliJ IDEA debugger 附加一个 MockNetwork 来 debug 你的 CorDap:

使用 node driver

你可以把 IntelliJ IDEA debugger 通过 node driver 附件到节点上来 debug 你的 CorDapp。

对于正在执行的节点

  1. 按照 Integration testing 中使用 node driver 定义一个网络
    • DriverParameters 中,确保 startNodesInProcess 设置为 true
  2. 使用 debugger 运行 driver
  3. 设置断点
  4. 跟你的节点进行互动。当执行到断点的位置时,执行会被暂停
    • 节点的 web servers 会一直在独立的一个进程中运行,不会被 debugger 附带

使用远程 debugging

  1. 像 Integration testing 中使用 node driver 定义一个网络

    • DriverParameter 中,确保 startNodesInProcess 设置为 false 并且 isDubug 设置为 true
  2. 运行 driver。每个节点的远程 debug 端口会自动生成并打印到终端中。像下边这样:

    [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 {}
  3. 将 debugger 附加到节点的 debug 端口:

    • 在 IntelliJ IDEA,创建一个 类型为 Remote 的 run/debug 配置
    • 将 run/debug 配置的 Port 设置为 debug 端口
    • 启动 run/debug 在 debug 模式
  4. 添加断点

  5. 跟你的节点互动,当执行到断点的时候,执行会被暂停

    • 节点的 web servers 会一直在独立的一个进程中运行,不会被 debugger 附带

在节点上开启远程 debugging

为了可以进行节点的远程 debugging,在终端窗口中运行以下命令:

java -Dcapsule.jvm.args="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" -jar corda.jar

这个命令会在 5005 端口上启动 debugger,并且会停止流程来等待 debugger 附件。