跳到主要内容
区块链Mar 28, 2026

Deep EVM #18:调试EVM字节码——追踪、栈转储和cast run

OS
Open Soft Team

Engineering Team

为什么EVM调试不同

调试EVM字节码不同于调试传统软件。没有断点、没有变量检查器、没有源码映射(对于Huff)。你的工具是操作码追踪和栈状态快照。

cast run:交易重放

Foundry的cast工具可以重放任何历史交易并显示完整的操作码追踪:

cast run 0x<tx_hash> --rpc-url mainnet -v

这会显示每个操作码、栈状态变化、内存修改和存储访问。

forge debug:逐步调试

对于本地测试,forge debug提供交互式调试器:

forge debug --debug testFunction

你可以逐步执行每个操作码,观察栈、内存和存储的变化。

常见调试场景

栈下溢

当操作码尝试弹出的元素多于栈上可用的元素时发生。追踪栈深度变化来定位问题。

静默回滚

交易回滚但没有错误信息。使用追踪找到REVERT操作码的位置。

Gas耗尽

使用gas追踪找到消耗最多gas的操作。通常是意外的冷存储访问。

总结

有效的EVM调试需要理解操作码级别的执行流程。cast run和forge debug是不可或缺的工具,能帮助你快速定位Huff和Yul代码中的bug。