[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-18-diaoshi-evm-zijie-ma-zhuizong-zhan-zhuanchu":3},{"article":4,"author":55},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":35,"related_articles":36},"d3000000-0000-0000-0000-000000000118","a0000000-0000-0000-0000-000000000032","Deep EVM #18：调试EVM字节码——追踪、栈转储和cast run","deep-evm-18-diaoshi-evm-zijie-ma-zhuizong-zhan-zhuanchu","掌握EVM字节码调试：使用cast run进行交易重放、forge debug逐步分析和Tenderly追踪实现快速bug定位。","## 为什么EVM调试不同\n\n调试EVM字节码不同于调试传统软件。没有断点、没有变量检查器、没有源码映射（对于Huff）。你的工具是操作码追踪和栈状态快照。\n\n## cast run：交易重放\n\nFoundry的cast工具可以重放任何历史交易并显示完整的操作码追踪：\n\n```bash\ncast run 0x\u003Ctx_hash> --rpc-url mainnet -v\n```\n\n这会显示每个操作码、栈状态变化、内存修改和存储访问。\n\n## forge debug：逐步调试\n\n对于本地测试，forge debug提供交互式调试器：\n\n```bash\nforge debug --debug testFunction\n```\n\n你可以逐步执行每个操作码，观察栈、内存和存储的变化。\n\n## 常见调试场景\n\n### 栈下溢\n当操作码尝试弹出的元素多于栈上可用的元素时发生。追踪栈深度变化来定位问题。\n\n### 静默回滚\n交易回滚但没有错误信息。使用追踪找到REVERT操作码的位置。\n\n### Gas耗尽\n使用gas追踪找到消耗最多gas的操作。通常是意外的冷存储访问。\n\n## 总结\n\n有效的EVM调试需要理解操作码级别的执行流程。cast run和forge debug是不可或缺的工具，能帮助你快速定位Huff和Yul代码中的bug。","\u003Ch2 id=\"evm\">为什么EVM调试不同\u003C\u002Fh2>\n\u003Cp>调试EVM字节码不同于调试传统软件。没有断点、没有变量检查器、没有源码映射（对于Huff）。你的工具是操作码追踪和栈状态快照。\u003C\u002Fp>\n\u003Ch2 id=\"cast-run\">cast run：交易重放\u003C\u002Fh2>\n\u003Cp>Foundry的cast工具可以重放任何历史交易并显示完整的操作码追踪：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">cast run 0x&lt;tx_hash&gt; --rpc-url mainnet -v\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>这会显示每个操作码、栈状态变化、内存修改和存储访问。\u003C\u002Fp>\n\u003Ch2 id=\"forge-debug\">forge debug：逐步调试\u003C\u002Fh2>\n\u003Cp>对于本地测试，forge debug提供交互式调试器：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">forge debug --debug testFunction\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>你可以逐步执行每个操作码，观察栈、内存和存储的变化。\u003C\u002Fp>\n\u003Ch2 id=\"\">常见调试场景\u003C\u002Fh2>\n\u003Ch3>栈下溢\u003C\u002Fh3>\n\u003Cp>当操作码尝试弹出的元素多于栈上可用的元素时发生。追踪栈深度变化来定位问题。\u003C\u002Fp>\n\u003Ch3>静默回滚\u003C\u002Fh3>\n\u003Cp>交易回滚但没有错误信息。使用追踪找到REVERT操作码的位置。\u003C\u002Fp>\n\u003Ch3>Gas耗尽\u003C\u002Fh3>\n\u003Cp>使用gas追踪找到消耗最多gas的操作。通常是意外的冷存储访问。\u003C\u002Fp>\n\u003Ch2 id=\"\">总结\u003C\u002Fh2>\n\u003Cp>有效的EVM调试需要理解操作码级别的执行流程。cast run和forge debug是不可或缺的工具，能帮助你快速定位Huff和Yul代码中的bug。\u003C\u002Fp>\n","zh","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:26.292902Z","调试EVM字节码——追踪、栈转储和cast run","掌握EVM字节码调试：cast run交易重放、forge debug逐步调试器以及操作码追踪。","调试evm字节码",null,"index, follow",[22,27,31],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000021","Foundry","foundry",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000017","Huff","huff","区块链",[37,43,49],{"id":38,"title":39,"slug":40,"excerpt":41,"locale":12,"category_name":35,"published_at":42},"d0000000-0000-0000-0000-000000000599","Ethereum互操作层：55+个L2如何成为一条链","ethereum-hucaozuoceng-55-l2-chengwei-yitiao-lian","Ethereum有55+个Layer 2 rollup，碎片化了流动性和用户体验。Ethereum互操作层 — 结合跨rollup消息传递、共享排序器和based rollup — 旨在将它们统一为一个可组合的网络。","2026-03-28T10:44:44.539584Z",{"id":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":35,"published_at":48},"d0000000-0000-0000-0000-000000000598","ZK证明超越Rollups：Ethereum上的可验证AI推理","zk-zhengming-chaoyue-rollups-ethereum-keyanzheng-ai-tuili","零知识证明不再仅仅是扩容工具。在2026年，zkML实现了链上可验证的AI推理，ZK协处理器将繁重计算移至链下并在链上验证，而SP1和Jolt等新证明系统使其变得实用。","2026-03-28T10:44:44.534954Z",{"id":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":35,"published_at":54},"d0000000-0000-0000-0000-000000000575","EIP-7702实战：Pectra之后构建智能账户流程","eip-7702-shizhan-pectra-zhihou-goujian-zhineng-zhanghu-liucheng","EIP-7702允许任何Ethereum EOA在单笔交易中临时充当智能合约。以下是如何使用新的账户抽象原语实现批量交易、gas赞助和社交恢复。","2026-03-28T10:44:42.997040Z",{"id":13,"name":56,"slug":57,"bio":58,"photo_url":19,"linkedin":19,"role":59,"created_at":60,"updated_at":60},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]