Remix-debug的使用
参考博客
官方文档1
官方文档2
1. 参考博客中获取的测试代码:
1 | // SPDX-License-Identifier: MIT |
2. 编译部署
3. 调用 increment
函数
4. 调试智能合约
4.1 先找到交易的hash值:
0xe19af7a3be310b85ccfb9538ef16314a575f395aae3787f71f897b4845547885
4.2 将交易的哈希填入,debug 的参数框内,点击
Start debugging
4.3 了解各个按钮的意思
① 返回到上一个步骤。函数调用将被忽略,调试器将不进入该函数。
② 后退一步回到上一步。函数不会被忽略,调试器将进入该函数。
③ Step into进入下一步,如果有函数调用,调试器将进入函数。
④ 跨步前进进入下一步,但是函数调用将被忽略,调试器不会进入函数。
⑤ 跳到上一个断点,使调试器进入最后访问的断点。可以通过点击代码的行号来设置断点
⑥ 跳出将调试器带到函数的末端
⑦ 跳到下一个断点会使调试器跳到编辑器中的下一个设定的断点。
还有一个是滑块,类似于进度条
4.4 刚开始调试的时候,increment() 函数体中的某些变量是高亮的,比如
newValue
这个变量正在被创建。一直往下调试的时候,counter 和 value 的也会高亮显示,模拟了加法的工作情况4.5 最终,在后几步, Solidity Locals 面板上这样显示
这意味着
newValue
当前的值是520。再继续往后走,_setCounter
函数将会高亮,意味着 控制被传递到内部函数_setCounter
,此时 debug 将不能继续往下走了,表示该方法已经运行完成4.6 可以观察到 Solidity State 中的
counter
的值已经发生了更新
5. 其他调试功能
5.1 函数栈
这个面板可以得到很多信息,比如哪个函数目前正在执行,哪个函数调用了它。如果有多个函数,它将以堆栈的形式显示。
5.2 全局变量
可以跟踪交易中的全局变量,以备你需要知道交易中的发件人或其他数据
5.3 步骤细节
可以得到一些额外的步骤数据,如已使用的gas 和 剩余的 gas
5.4 操作码
使用操作码,可以得到关于合同当前步骤的高级信息。你可以了解程序何时执行步骤,如 JUMP (????)。
内心:
此时的我内心还是很懵逼的,道理都懂,但是其中的细节还是不懂,为什么下一步可以点那么那么多下,之前学 Java 的时候,使用 Idea debug调试代码,好像都不需要点这么多下,可能得多用吧,多练多用