区块链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。