调试智能合约

Posted 唯夜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调试智能合约相关的知识,希望对你有一定的参考价值。

调试智能合约

Truffle 包含一个集成的调试器,这样您就可以调试与您的合约相关的交易。
这个调试器看起来和感觉上都像是传统开发环境中可用的现有命令行调试器。

概览

在区块链上调试交易比传统的应用调试起来困难得多。在区块链上调试交易时,
代码不是是试运行的;相反,您将逐步执行该交易的历史执行,并将该执行映射到其关联的代码上。
这在调试方面给了我们很多自由,只要我们有事务交互的合约代码和构件,我们就可以随时调试任何交易。
这些代码和构建类似于传统调试器所需的调试符号。

为了调试交易,你需要如下工具:

  • Truffle 4.0 或更高版本
  • 区块链中的交易哈希值
  • 交易的源代码和构件

注意,如果您想要的交易导致的异常,或者耗尽了 gas ,这是可以的。交易仍然存在于链上,所以您仍然可以调试它!

命令行

为了调试和获取交易我们需要运行如下命令行:

$ truffle debug <transaction hash>

例子如下:

$ truffle debug 0x8e5dadfb921ddddfa8f53af1f9bd8beeac6838d52d7e0c2fe5085b42a4f3ca76

调试接口

启动调试器后会打开一个与调试其他类型的应用程序相似的接口。你会看到以下内容:

  • 在此交易过程中处理或创建的地址列表
  • 调试可用的命令行列表
  • 以及交易的初始入口,包括合约源文件和代码预览

回车以执行命令。调试开始的时候,回车键被设置为单步调试按钮。你可以按回车来单步调试,或者输入以下命令查看交易详细信息:

(O) STEP OVER

这个命令会跳过当前行,相对于当前在实体源文件中求值的语句或表达式的位置。如果你不想进入某个函数内部,或者不想查看合约的创建,
或者向快速跳转到特定行,就是用这个命令。

(I) STEP INTO

此命令将逐步执行到当前正在执行函数调用或合约创建中。使用此命令跳转到函数中,并快速开始调试那里存在的代码。

(U) STEP OUT

这个命令会跳出当前函数。使用这个命令快速返回到调用该函数的地方,或者结束创合约交易。

(;) STEP INSTRUCTION

这个命令允许你逐步调试虚拟机的机器执行指令。这个对于了解 solidity 源码生成的底层字节码很有帮助。
当您使用此命令时,调试器任然会在执行指令时打印堆栈数据。

(P) PRINT INSTRUCTION

该命令打印当前指令和堆栈数据,但不会跳转到下一条指令。当您希望在使用上面描述的逻辑命令浏览交易之后查看当前指令和堆栈数据时,请使用此命令。

(H) PRINT THIS HELP

输出所有可用指令

(Q) QUIT

退出调试器

以上是关于调试智能合约的主要内容,如果未能解决你的问题,请参考以下文章

智能合约语言 传统编程语言 异同

区块链智能合约与传统合同:挑战OR机遇?

区块链开发编写调试第一个以太坊智能合约

在以太坊编辑器remix中调试合约使用的是remix的那项功能?

智能合约实战 solidity 调试环境设置 Debugger/remix

智能合约实战 solidity 调试环境设置 Debugger/remix