本文档包含内容来自于Truffle Framework
本文包含内容如下:
- 调试智能合约
truffle包含一个集成的调试器,因此可以调试你编写的智能合约。该调试器和其他已有的命令行调试器看起来很相似。
在区块链上调试一笔交易和调试传统的应用程序不同。调试智能合约时,你无法实时运行代码;而是跳过了交易的历史记录,然后把执行映射到其关联的代码。这给了我们调试中很大的自由度,我们可以任意时间调试任意的交易,只要我们有该笔交易所在合约的代码和工件(artifacts)。
为了调试交易,你需要:
- truffle 4.0+
- 交易的哈希地址
- 交易的源代码及编译后的工件
提示:如果交易抛出异常或者没有 gas (即所给的 gas 不够运行当前交易),这笔交易仍然存在于链上,因此仍然可以调试!
truffle的调试命令如下:
$ truffle debug <transaction hash>
这就会启动如下的调试接口。
调试接口启动后,会看到如下信息:
- 在这个交易过程中创建或进行交易的地址列表。
- 使用调试器可用的命令列表。
- 以及交易的初始入口,包含合约源文件和代码预览。
enter
(回车键)设置为执行上一个输入命令。调试器启动后,默认回车键是执行交易的下一个逻辑代码元素(如EVM中下一个表达式或声明)。这个时候可以用回车继续执行交易,或者用调试命令获取更多细节。 更多调试命令如下:
该命令跳过当前行,相对于当前solidity源文件中的声明或表达式的位置。使用这个命令,不会进入当前行所在的方法调用或合约创建,或可以快速跳到源文件中一个指定的位置。
该命令进入当前行所在的方法调用或者合约创建。使用这个命令可以快速开始代码调试。
该命令跳出当前运行的方法。可以快速返回、或结束当前交易的执行。
该命令执行源代码中下一个逻辑表达式。
该命令允许调试每个单独的指令。如果想要理解低层级的字节码这会很有用。使用这个命令,调试器还会打印出该指令的堆栈数据。
该命令打印当前指令及堆栈数据,但不会跳到下一个指令。
打印可用的命令列表。
退出调试器
转载请注明以下信息:
有问题、疑问,欢迎到社区提问 -
HiBlock 秉承开放、协作、透明、链接、分享的价值观,致力打造一个专注于区块链的开发者社区,我们不仅在开发者中宣传推广区块链,还会帮助开发者真正掌握区块链技术和应用。我们有线上活动(如一起译文档、一起学以太坊、一起学EOS等),有培训课程(提供专业的区块链技术培训 http://hiblock.net/topics/node16 )、也有线下沙龙聚会(全国各城进行线下交流),还有blockathon(链接全球区块链开发者)。详情参考:https://github.com/HiBlock/hiblock/tree/master/meetup