跳转至

Rust 智能合约调试

原文:https://docs.elrond.com/developers/developer-reference/rust-smart-contract-debugging

使用 Visual Studio 代码中的集成调试器可以调试智能合约。您将能够像调试常规程序一样调试您的合约。

先决条件

对于本教程,您需要:

如果您想跟进,您可以克隆 elrond-wasm-rs 存储库并使用众筹-esdt 示例。

分步调试

在 VSCode 中,只需单击行号的左侧,就可以在代码中的任何位置放置断点。应该会出现一个红点,将断点标记为由环境注册:

img

一旦你完成了这些,你就可以通过点击测试函数名上方的Debug按钮来调试你的测试函数:

img

如果它没有出现,您可能需要等待 rust-analyser 加载,或者您可能已经忘记了#[test]注释。

一旦开始测试,它应该会在断点处停止,并为您突出显示当前行:

img

然后,您可以使用 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}



回到顶部