Substrate runtime开发中如何打印出tracing message
How to print out tracing message in Substrate runtime development
在进行 Parity Substrate 运行时开发时,如何打印调试消息以跟踪和检查我的变量?
作为Substrate开发的新手,我找到的最直接的方法就是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。
您还可以使用 sp-std
中包含的 if_std!
宏:
https://github.com/paritytech/substrate/pull/2979
if_std!
是一个功能门控,只有当 std
功能启用时才应该是 运行。
例子
sp_std::if_std! {
// This code is only being compiled and executed when the `std` feature is enabled.
println!("Hello native world");
}
这样更好,因为您可以 println
变量和其他东西,而不是简单地打印字符串。
以上两个答案本身都是正确的sense/time。这里有一个更准确的概述:
runtime_io::print("...");
已移动。您现在可以使用 sp-runtime::print()
. These will be visible in a log target named runtime
. So you'd have to do RUST_LOG=runtime=debug
. You are still calling into sp_io
under the hood though. Also, note that frame_support
中为您重新导出的相同功能。大多数托盘无论如何都需要 frame_support
,这使使用更容易。
- 如果要为 wasm 和本机编译,并且只想为本机执行打印,请使用
sp_std::if_std!{}
宏。
- 终于可以使用
frame_support::debug
模块了。该模块提供了上述两个的包装器,使使用更容易,更像 rust-like。与普通记录器类似,您可以使用 debug::native::warn!(...)
等
最后一个有用的提示是:如果可能,您可以使用 println!
和 SKIP_WASM_BUILD=1 cargo run [xxx]
来膨胀您的代码。当您正在开发并希望在没有上述任何设置的情况下快速调试打印时,这很有用。
在进行 Parity Substrate 运行时开发时,如何打印调试消息以跟踪和检查我的变量?
作为Substrate开发的新手,我找到的最直接的方法就是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。
您还可以使用 sp-std
中包含的 if_std!
宏:
https://github.com/paritytech/substrate/pull/2979
if_std!
是一个功能门控,只有当 std
功能启用时才应该是 运行。
例子
sp_std::if_std! {
// This code is only being compiled and executed when the `std` feature is enabled.
println!("Hello native world");
}
这样更好,因为您可以 println
变量和其他东西,而不是简单地打印字符串。
以上两个答案本身都是正确的sense/time。这里有一个更准确的概述:
runtime_io::print("...");
已移动。您现在可以使用sp-runtime::print()
. These will be visible in a log target namedruntime
. So you'd have to doRUST_LOG=runtime=debug
. You are still calling intosp_io
under the hood though. Also, note thatframe_support
中为您重新导出的相同功能。大多数托盘无论如何都需要frame_support
,这使使用更容易。- 如果要为 wasm 和本机编译,并且只想为本机执行打印,请使用
sp_std::if_std!{}
宏。 - 终于可以使用
frame_support::debug
模块了。该模块提供了上述两个的包装器,使使用更容易,更像 rust-like。与普通记录器类似,您可以使用debug::native::warn!(...)
等
最后一个有用的提示是:如果可能,您可以使用 println!
和 SKIP_WASM_BUILD=1 cargo run [xxx]
来膨胀您的代码。当您正在开发并希望在没有上述任何设置的情况下快速调试打印时,这很有用。