抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Remix-debug的使用

参考博客

官方文档1

官方文档2

1. 参考博客中获取的测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract Debugging {
uint256 counter;
constructor(uint256 _counter) {
counter = _counter;
}
function _setCounter(uint256 _counter) internal {
counter = _counter;
}
function increment(uint256 value) public {
uint256 newValue = counter + value;
_setCounter(newValue);
}
function decrement(uint256 value) public {
uint256 newValue = counter - value;
_setCounter(newValue);
}
function getCounter() public view returns(uint256) {
return counter;
}
}

2. 编译部署

image-20240412173103870

3. 调用 increment 函数

image-20240412173110707

4. 调试智能合约

  • 4.1 先找到交易的hash值:0xe19af7a3be310b85ccfb9538ef16314a575f395aae3787f71f897b4845547885

  • image-20240412173118810

  • 4.2 将交易的哈希填入,debug 的参数框内,点击 Start debugging

  • image-20240412173128672

  • image-20240412173136664

  • 4.3 了解各个按钮的意思

  • image-20240412173143375

    • ① 返回到上一个步骤。函数调用将被忽略,调试器将不进入该函数。

    • ② 后退一步回到上一步。函数不会被忽略,调试器将进入该函数。

    • ③ Step into进入下一步,如果有函数调用,调试器将进入函数。

    • ④ 跨步前进进入下一步,但是函数调用将被忽略,调试器不会进入函数。

    • ⑤ 跳到上一个断点,使调试器进入最后访问的断点。可以通过点击代码的行号来设置断点

    • ⑥ 跳出将调试器带到函数的末端

    • ⑦ 跳到下一个断点会使调试器跳到编辑器中的下一个设定的断点。

      还有一个是滑块,类似于进度条

  • 4.4 刚开始调试的时候,increment() 函数体中的某些变量是高亮的,比如newValue 这个变量正在被创建。一直往下调试的时候,counter 和 value 的也会高亮显示,模拟了加法的工作情况

  • 4.5 最终,在后几步, Solidity Locals 面板上这样显示

  • image-20240412173151062

  • 这意味着 newValue 当前的值是520。再继续往后走, _setCounter 函数将会高亮,意味着 控制被传递到内部函数 _setCounter ,此时 debug 将不能继续往下走了,表示该方法已经运行完成

  • image-20240412173201136

  • 4.6 可以观察到 Solidity State 中的 counter 的值已经发生了更新

  • image-20240412173210460

5. 其他调试功能

5.1 函数栈

image-20240412173216972

这个面板可以得到很多信息,比如哪个函数目前正在执行,哪个函数调用了它。如果有多个函数,它将以堆栈的形式显示。

5.2 全局变量

image-20240412173223650

可以跟踪交易中的全局变量,以备你需要知道交易中的发件人或其他数据

5.3 步骤细节

image-20240412173229518

可以得到一些额外的步骤数据,如已使用的gas 和 剩余的 gas

5.4 操作码

image-20240412173238977

使用操作码,可以得到关于合同当前步骤的高级信息。你可以了解程序何时执行步骤,如 JUMP (????)。

内心:

此时的我内心还是很懵逼的,道理都懂,但是其中的细节还是不懂,为什么下一步可以点那么那么多下,之前学 Java 的时候,使用 Idea debug调试代码,好像都不需要点这么多下,可能得多用吧,多练多用

评论



政策 · 统计 | 本站使用 Volantis 主题设计