我想使用到 console.log 的消息进行调试。
我们有一个 rust wasm32-wasi 函数从运行在 nodejs 中的 javascript 调用。由于其他限制,我们不能使用 ssvm/ssvmup。
我们可以做些什么来在控制台中查看来自 wasm 代码的消息吗?
这在wasm-bindgen 指南:使用 console.log中得到了回答:
方法#1,手动绑定:
#[wasm_bindgen]
extern "C" {
// Use `js_namespace` here to bind `console.log(..)` instead of just
// `log(..)`
#[wasm_bindgen(js_namespace = console)]
fn log(s: &str);
// The `console.log` is quite polymorphic, so we can bind it with multiple
// signatures. Note that we need to use `js_name` to ensure we always call
// `log` in JS.
#[wasm_bindgen(js_namespace = console, js_name = log)]
fn log_u32(a: u32);
// Multiple arguments too!
#[wasm_bindgen(js_namespace = console, js_name = log)]
fn log_many(a: &str, b: &str);
}
fn bare_bones() {
log("Hello from Rust!");
log_u32(42);
log_many("Logging", "many values!");
}
方法#2,使用web-sys
箱子:
fn using_web_sys() {
use web_sys::console;
console::log_1(&"Hello using web-sys".into());
let js: JsValue = 4.into();
console::log_2(&"Logging arbitrary values looks like".into(), &js);
}
另一种可能的选择是,如果您要进行大量日志记录,则可能需要考虑将log
crate 与wasm-logger
外观一起使用:
wasm_logger::init(wasm_logger::Config::default());
// Logging
log::info!("Some info");
log::error!("Error message");