调试器
调试交易的时候,调试器会显示合约的状态。
可以对Remix上创建的交易进行调试,也可以提供一个交易哈希。使用交易哈希的时候要保证你有这个合约的源码或者你输入了已经验证过的合约的地址。
启动调试会话:
当终端里出现了成功或者失败的交易时, 点击 Debug(调试)按钮。Debugger(调试器)被激活,然后在 侧面板 里进行显示。
激活 插件管理器中的Debugger(调试器),然后点击图标面板中的Debugger(调试器)按钮。 想要启动调试会话, 输入已部署交易的地址 - 在编辑器中有源代码,然后点击 Start debugging(开始调试) 按钮。
调试器将在编辑器中高亮显示相关的代码。 如果你想关掉调试器的高亮去编辑代码,请点击 Stop Debugging(停止调试) 按钮。
要了解更多关于如何使用此工具的信息,请前往 调试交易 页面。
此页面将介绍调试器的“Use generated sources(使用生成的源代码)”选项,以及它的导航和面板。
使用生成的源代码
这个选项适用于使用 Solidity 0.7.2 或更高版本的合约。有关[生成源]的更多详细信息,请参阅 Solidity 博客(https://blog.soliditylang.org/2020/09/28/solidity-0.7.2-release-announcement/#notable-new-features)。
使用 生成的源代码 将使审核合约更加容易。当选中该选项时,您可以在调试时进入那些编译器输出。
这些编译器输出将出现在 Remix 编辑器中的单独 .yul 文件中。
调试器面板
函数堆栈
Function stack 列出交易中涉及到的函数列表。
Solidity Locals
Solidity Locals是指函数内部的本地变量。
Solidity 状态
这些是合约的状态变量。
操作码
该面板显示了调试器当前所在的步骤编号和 操作码(opcode) 。
当您拖动导航按钮上面的 滚动条 时,焦点步骤编号和操作码会发生变化。
步骤详情
步骤详情显示更多关于当前码步骤操作的信息。
堆栈
此面板显示EVM Stack信息。
更多关于 stack 的信息。
内存
每次新的调用内存都会被清除。内存是线性的,可以按字节级寻址。 读取 的宽度限制为256位,而 写入 可以是8位或256位。
内存面板由三列组成。为了让格式正确,你可以将Remix的侧面板稍微扩大一些。(将主面板和侧面板之间的边界向右拖动)。
第一列是内存中的位置。第二列是十六进制编码的值。第三列是解码后的值。如果没有值,则会显示问号(?)。
0x10: 00000000000000000000000000000000 ????????????????
这是一个完整的 Memory 面板示例,
一些地址槽包含十六进制编码的值,这些值随后会被解码。例如,检查位置 0xa0 和 0x140 。
存储
这是永久存储。
调用堆栈
所有计算都在一个名为“调用栈”的数据数组上执行。它最大为1024个元素,每个元素包含256位的字。
调用数据
调用数据包含函数参数。
返回值
指向函数返回的值。
完整存储变更
这显示了函数结束时的持久化存储。
断点
可以在编辑器的边栏放置断点来暂停调试器。
附加信息
调试器提供精细的信息,能够向用户详细说明交易的发生情况 - 因此,调试器不仅适用于调试,还是一种极好的教学工具。
要了解如何使用调试器,请前往调试交易。