Rust 智能合约调试
原文:https://docs.elrond.com/developers/developer-reference/rust-smart-contract-debugging
使用 Visual Studio 代码中的集成调试器可以调试智能合约。您将能够像调试常规程序一样调试您的合约。
先决条件
对于本教程,您需要:
如果您想跟进,您可以克隆 elrond-wasm-rs 存储库并使用众筹-esdt 示例。
分步调试
在 VSCode 中,只需单击行号的左侧,就可以在代码中的任何位置放置断点。应该会出现一个红点,将断点标记为由环境注册:
一旦你完成了这些,你就可以通过点击测试函数名上方的Debug
按钮来调试你的测试函数:
如果它没有出现,您可能需要等待 rust-analyser 加载,或者您可能已经忘记了#[test]
注释。
一旦开始测试,它应该会在断点处停止,并为您突出显示当前行:
然后,您可以使用 VSCode 的分步调试(通常是 F10 单步调试、F11 单步调试或 shift + F11 单步调试)。
考察变量
对于像 u64 这样的基本锈蚀类型,你只需将鼠标悬停在它们上面就能看到其价值。
然而,你可能会尝试将鼠标悬停在target
变量上,但很快就会失望,因为你看到的只是这样的东西:
handle:0
_phantom:{...}
这不是很有帮助。不幸的是,对于托管类型,类型本身并没有实际的数据,只有堆栈中某处的句柄(即索引)。
因此,我们有了sc_print!
宏:
sc_print!("{}", target);
将这一行添加到#[init]
函数的开头将在控制台中打印2000
。
打印格式化消息
如果你想打印其他数据类型,甚至是一条消息,你仍然可以使用sc_print!
宏。
例如,如果您要将它添加到#[init]
函数的开头:
sc_print!(
"I accept {}, a number of {}, and only until {}",
token_identifier,
target,
deadline
);
该宏将打印以下内容:
"I accept CROWD-123456, a number of 2000, and only until 604800"
注意:对于 ASCII 或十进制表示,使用{}
,对于十六进制,使用{:x}
。