我正在使用ganache和块菌来编写一些可靠的测试(遵循https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-solidity中的示例)。
我得到的消息通常并不是很有帮助:"Error:返回的错误: VM异常,同时处理事务: revert“。
我在代码中添加了事件,无论是在测试中还是在实际合同中。
当错误发生时,不会显示任何内容。
它没有显示失败的事务,因此我无法尝试启动调试会话。
没有断点也没有日志记录。如何调试此测试?
使用控制台,我已经验证了合同是否如预期的那样工作。
发布于 2021-08-20 09:13:38
测试事物的一些可能的选项:
console.log。做1是最简单的方法,2是困难的,3是最难的。
发布于 2021-08-18 20:50:01
首先,事件日志不会保存在事务失败时,因此您可以使用日志查看代码停止的位置。
如果您使用的是geth,您可以使用rpc命令debug_traceTransaction和traceCaller参数,它将从调用的契约开始返回对每个外部契约的所有调用。
如果您正在使用ganache,那么上面的选项是不可用的,您最好的选择是创建一个不会失败事务的测试智能契约,以获取事件日志。另一种选择是在您认为不带消息的契约调用上使用solidity的try和catch,并且在catch块中,您可以使用自己的消息进行还原。
“无消息还原”很容易成为您自己的契约代码无法正确执行的问题,比如超出范围的索引,或者在试图遍历更改的列表时。
发布于 2021-08-19 02:16:56
当涉及到调试时,您可能需要检查硬帽。这是一个开发环境,您可以将console.logs (与javascript中的方式相同)放置在智能契约中,这将为您提供更好的概述,您的逻辑中断在哪里。
https://ethereum.stackexchange.com/questions/107370
复制相似问题