前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在solidity中debug?

如何在solidity中debug?

作者头像
十四君
发布2022-04-02 09:31:12
1.2K0
发布2022-04-02 09:31:12
举报
文章被收录于专栏:UrlteamUrlteam

最近在重新部署区块链借贷项目compound时,出现了好多次VM 异常:还原。

Error: VM Exception while processing transaction: revert.

十分绝望,整理外网上一些debug策略,帮助同样陷于缺少console.log()来debug-solidity的同学打开思路

如何更好的使用Remix调试合约?

应该在Remix中编写合同。将其连接到本地区块链实例(例如Ganache),从而可以使用Truffle 调试器dApp 工具 调试器

如果有需要相互通信的合约或合约具有相当繁琐的继承结构,可尝试使用[truffle-flattener](<https://www.npmjs.com/package/truffle-flattener>)

哪些堆栈有用?

寻找堆栈中 已sol结尾的合约文件记录,尾数是行号列号

at YourContract…the error…YourContract.sol:***121:21***

哪些经典的报错?

经典错误异常表

  1. Wrapping over/under:经典溢出错误,Solidity 中的数字存储空间有限,使数字大于其分配的存储空间,就会溢出到最小值
  2. OUT_OF_GAS: "out of gas” 合约调用使用了太多的gas。原因有很多,例如递归调用,执行过于复杂的计算,以及调用函数链那太长了。
  3. STACK_UNDERFLOW: "stack underflow/overflow" 当前数值出于最大最小,很可能即将溢出
  4. INVALID_JUMP: "invalid JUMP” 无效的跳跃指令,当函数调用超出范围(例如数组超出范围)时会发生此错误
  5. INVALID_OPCODE: "invalid opcode” 试图在某个地方执行不存在的操作码
  6. REVERT: "revert” 某处坏了。此还原将返回剩余的gas—这个最绝望
  7. STATIC_STATE_CHANGE: "static state change”view函数中试图改变状态值

-上文列表后续持续遇到了更新进去


使用调试器来debug?

remix自带调试器

Truffle 调试器

在项目目录的命令行中运行 Truffle 调试器

truffle.js的本地主机地址与 Ganache 本地端口相同。truffle debug 交易哈希 靠他的单步执行断点调试了,虽然remix也基本可以做到类似的事情

为何事件和空白的代码行会失败?

那可能当前是没有了gas

推荐一些不错的工具:

专用调试debug的工具:

  1. https://github.com/trufflesuite/truffle/issues
  2. https://dapp.tools/
  3. https://truffleframework.com/ganache
  4. http://remix.ethereum.org/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何更好的使用Remix调试合约?
  • 哪些堆栈有用?
  • 哪些经典的报错?
  • 经典错误异常表
  • 使用调试器来debug?
    • remix自带调试器
      • Truffle 调试器
        • 为何事件和空白的代码行会失败?
          • 推荐一些不错的工具:
          相关产品与服务
          区块链
          云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档