从 rust wasm32-wasi 调用 console.log 而无需 ssvm/ssvmup
Calling console.log from rust wasm32-wasi without the need for ssvm/ssvmup
我想使用发送到 console.log 的消息进行调试。
我们在 nodejs 中从 javascript 运行 调用了一个 rust wasm32-wasi 函数。由于其他限制,我们无法使用 ssvm/ssvmup。
我们可以做些什么来在控制台中查看来自我们的 wasm 代码的消息?
这在The wasm-bindgen Guide: Using console.log中得到了回答:
方法一,手动绑定:
#[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
crate:
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 with the wasm-logger
门面:
wasm_logger::init(wasm_logger::Config::default());
// Logging
log::info!("Some info");
log::error!("Error message");
我想使用发送到 console.log 的消息进行调试。
我们在 nodejs 中从 javascript 运行 调用了一个 rust wasm32-wasi 函数。由于其他限制,我们无法使用 ssvm/ssvmup。
我们可以做些什么来在控制台中查看来自我们的 wasm 代码的消息?
这在The wasm-bindgen Guide: Using console.log中得到了回答:
方法一,手动绑定:
#[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
crate: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 with the wasm-logger
门面:
wasm_logger::init(wasm_logger::Config::default());
// Logging
log::info!("Some info");
log::error!("Error message");