如何使用 VSCode 和 CodeLLDB 调试 Rust 和 WebAssembly 程序?
How to debug Rust and WebAssembly program with VSCode and CodeLLDB?
我在写Rust and WebAssembly program。我想用 VSCode 和 CodeLLDB 调试 Rust 和 WebAssembly 程序,但出现错误。我可以调试简单的 Rust 程序,但无法调试 Rust 和 WebAssembly 程序。 重现错误的步骤如下所示。
使用此命令克隆 Rust 和 WebAssembly 项目模板:
cargo generate --git https://github.com/rustwasm/wasm-pack-template
然后,键入项目名称。我用了“foo”。
在foo/src/lib.rs
中添加测试
mod utils;
use wasm_bindgen::prelude::*;
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
// allocator.
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
#[wasm_bindgen]
extern {
fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet() {
alert("Hello, foo!");
}
// add this test.
#[test]
fn foo_test() {
assert_eq!(1, 1);
}
在 foo_test() 处放置一个断点。然后,创建一个 launch.json 文件。
.vscode/launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in library 'foo'",
"cargo": {
"args": [
"test",
"--no-run",
"--lib",
"--package=foo"
],
"filter": {
"name": "foo",
"kind": "lib"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug integration test 'web'",
"cargo": {
"args": [
"test",
"--no-run",
"--test=web",
"--package=foo"
],
"filter": {
"name": "web",
"kind": "test"
}
},
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
在我开始“在库 'foo' 中调试单元测试”之后,我收到一条错误消息,“Cargo 没有生成匹配的编译工件”。我该怎么做才能修复此错误?
我的设置:macOS Big Sur 11.2.3,Visual Studio Code(VSCode) 1.55.1,CodeLLDB 1.6.1,cargo 1.51.0。
这可能不是最有帮助的答案,但答案是您目前不能 - wasm-bindgen 存储库中存在一个未解决的问题,用于跟踪未来对调试的支持,但目前尚不支持:https://github.com/rustwasm/wasm-bindgen/issues/2389
请注意,即使是这样,您也需要使用浏览器 DevTools 而不是 CodeLLDB 来进行 WebAssembly 调试,因为您需要一个支持 JavaScript 的环境。
我在写Rust and WebAssembly program。我想用 VSCode 和 CodeLLDB 调试 Rust 和 WebAssembly 程序,但出现错误。我可以调试简单的 Rust 程序,但无法调试 Rust 和 WebAssembly 程序。 重现错误的步骤如下所示。
使用此命令克隆 Rust 和 WebAssembly 项目模板:
cargo generate --git https://github.com/rustwasm/wasm-pack-template
然后,键入项目名称。我用了“foo”。 在foo/src/lib.rs
中添加测试mod utils;
use wasm_bindgen::prelude::*;
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
// allocator.
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
#[wasm_bindgen]
extern {
fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet() {
alert("Hello, foo!");
}
// add this test.
#[test]
fn foo_test() {
assert_eq!(1, 1);
}
在 foo_test() 处放置一个断点。然后,创建一个 launch.json 文件。
.vscode/launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in library 'foo'",
"cargo": {
"args": [
"test",
"--no-run",
"--lib",
"--package=foo"
],
"filter": {
"name": "foo",
"kind": "lib"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug integration test 'web'",
"cargo": {
"args": [
"test",
"--no-run",
"--test=web",
"--package=foo"
],
"filter": {
"name": "web",
"kind": "test"
}
},
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
在我开始“在库 'foo' 中调试单元测试”之后,我收到一条错误消息,“Cargo 没有生成匹配的编译工件”。我该怎么做才能修复此错误?
我的设置:macOS Big Sur 11.2.3,Visual Studio Code(VSCode) 1.55.1,CodeLLDB 1.6.1,cargo 1.51.0。
这可能不是最有帮助的答案,但答案是您目前不能 - wasm-bindgen 存储库中存在一个未解决的问题,用于跟踪未来对调试的支持,但目前尚不支持:https://github.com/rustwasm/wasm-bindgen/issues/2389
请注意,即使是这样,您也需要使用浏览器 DevTools 而不是 CodeLLDB 来进行 WebAssembly 调试,因为您需要一个支持 JavaScript 的环境。