如何在Substrate运行时开发中打印出跟踪消息

时间:2019-07-19 09:40:31

标签: substrate

在进行Parity Substrate运行时开发时,如何打印出调试消息以跟踪和检查变量?

3 个答案:

答案 0 :(得分:2)

以上两个答案在他们自己的意义/时间上都是正确的。这是更准确的概述:

  • runtime_io::print("...");已移动。现在,您可以使用sp-runtime::print()中的相同功能。这些将在名为runtime的日志目标中可见。因此,您必须执行RUST_LOG=runtime=debug。您仍在拨打sp_io under the hood though。另外,请注意,frame_support正在为您重新导出此文件。无论如何,大多数货盘都需要frame_support,这使使用更加容易。
  • 如果要为wasm和native进行编译,并且只希望打印用于本机执行,请使用sp_std::if_std!{}宏。
  • 最后,您可以使用frame_support::debug模块。该模块提供了上述两种包装,使使用更容易且更像 rust-like 。与普通记录器类似,您可以使用debug::native::warn!(...)等。

最后一个有用的技巧是:在可能的情况下,您可以使用println!膨胀代码并执行SKIP_WASM_BUILD=1 cargo run [xxx]。这在您进行开发并且需要快速调试打印而没有上面说明的任何设置时很有用。

答案 1 :(得分:0)

作为底物开发的新手,我发现的最直接的方法是使用runtime_io::print()

示例:

use runtime_io::{ self };

decl_module! {
  pub struct Module<T: Trait> for enum Call where origin: T::Origin {
    fn deposit_event<T>() = default;

    pub fn my_func(origin) -> Result {
      runtime_io::print("Hello World");
      Ok(());
    }
  }
}

该消息将出现在控制台中。由于它不断滚动,因此请迅速注意。

有关完整示例,请参见TCR tutorial example in github

答案 2 :(得分:0)

您还可以使用if_std!附带的rstd宏:

https://github.com/paritytech/substrate/pull/2979

if_std!是一个功能门,仅当启用std功能时才应运行。

示例

use sr_std::if_std;

if_std! {
    // This code is only being compiled and executed when the `std` feature is enabled.
    println!("Hello native world");
}

这更好,因为您可以println变量和填充而不是简单地打印字符串。