运行时错误:在 rustwasm 中无法访问

Nav*_*een 5 rust webassembly

我收到代码错误“RuntimeError: unreachable in rustwasm”

错误信息:

Uncaught (in promise) RuntimeError: unreachable
    at __rust_start_panic (http://127.0.0.1:8080/wasm_bg.wasm:wasm-function[346]:0x274ec)
    at rust_panic (http://127.0.0.1:8080/wasm_bg.wasm:wasm-function[254]:0x26d0b)
    at std::panicking::rust_panic_with_hook::hb07b303a83b6d242 (http://127.0.0.1:8080/wasm_bg.wasm:wasm-function[168]:0x24a47)
    at rust_begin_unwind (http://127.0.0.1:8080/wasm_bg.wasm:wasm-function[228]:0x267ed)
    at core::panicking::panic_fmt::h62f7e605cdf65d83 
    at core::panicking::panic_bounds_check::ha440f41d0e4eca5f 
    at virtualdom::parseNode::h9ba47b7b20126d66 
    at run ()
    at init ()
Run Code Online (Sandbox Code Playgroud)

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ac403a9043e49b7a2fc3814a692b8d49

我有以下问题?

  1. 它来自parseNode函数吗?
  2. 是因为dm.children[i]溢出了吗?或者在 wasm 后台运行时删除了一些函数?
  3. 我试图钩住panic::set_hook(Box::new(console_error_panic_hook::hook));但没有多大帮助!我应该如何调试此类错误?

Val*_*tin 3

问题是,dm.children.len()1while 循环的第一次迭代之后,然后i就变得1越界,从而触发恐慌1

解决此问题的最简单方法是将 while 循环替换为 for 循环,并匹配Node::Elementfor 循环内的变体。

for child in dm.children {
    if let Node::Element(x) = child {
        let nod = Node1 {
            tag: x.name,
            props: x.classes,
            children: x.children,
        };

        println!("{:?}", nod.tag);
        createElement(&nod);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您没有处理createElement()返回的结果。

由于您遇到问题的这个特定代码实际上没有任何特定的 WASM/Web 相关内容。然后,您可以将该代码编译为常规 Rust 二进制文件以进行测试,这将为您提供更多有用的错误并简化测试。