Tauri断点不生效的根本原因是tauri dev将前后端绑定运行,而VSCode调试器需直接attach到cargo run启动的Rust进程;必须在项目根目录配置Cargo.toml定义workspace、用cargo run单独启动后端,并确保前端dev server独立运行且devPath配置正确。

为什么 tauri dev 启动后 Rust 断点不生效
不是 VSCode 没配对,而是 tauri dev 默认把前后端“绑死”在一个进程里跑,但调试器只 attach 到主进程(即 Rust 可执行文件),而前端构建服务(如 Vite)实际是另一个独立进程——断点打在 src-tauri/src/main.rs 里,却没让调试器真正加载对应符号。
-
tauri dev启动时会先运行前端构建命令(如pnpm run dev),再启动 Rust 后端,并用 IPC 连接;但默认不暴露 Rust 进程的调试端口 - VSCode 的调试器需要直接 attach 到
cargo run启动的二进制,而不是通过tauri dev中转 - 如果你在
src-tauri子目录下打开 VSCode,rust-analyzer无法识别 workspace,main.rs里所有tauri::导入都会标红,断点根本不会被注入
必须在项目根目录放 Cargo.toml 并正确打开工作区
VSCode 不会自动读 tauri.conf.json 里的 src-tauri 路径,rust-analyzer 只认标准 Cargo workspace 结构。不加这个文件,它就当整个项目是单个 Rust 文件处理,类型推导全崩,断点位置错乱。
- 确保 VSCode 打开的是**含
tauri.conf.json和src-tauri的最外层目录**,不是src-tauri子目录 - 在该目录下创建
Cargo.toml,内容仅需两行:[workspace] members = ["src-tauri"]
- 保存后按
Ctrl+Shift+P→ 输入 “Rust Analyzer: Reload Workspace”,等状态栏左下角图标停止旋转 - 此时
src-tauri/src/main.rs中的#[tauri::command]函数能跳转、类型提示正常,断点才能被正确识别
配置 launch.json 直接调试 cargo run,别碰 tauri dev
混合调试的本质是:前端走自己的 dev server(如 pnpm run dev),后端单独用 cargo 启动并 attach 调试器。两者通过 devPath 关联,但进程完全分离。
- 在项目根目录建
.vscode/launch.json,内容如下(Windows):{ "version": "0.2.0", "configurations": [ { "name": "(Windows) Debug Tauri Backend", "type": "cppvsdbg", "request": "launch", "program": "${workspaceFolder}/src-tauri/target/debug/${workspaceFolderBasename}-app.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false } ] } - macOS/Linux 用户换用
type: "lldb",program路径末尾改为-app(无.exe) - 启动前务必先在终端运行
pnpm run dev(或npm run dev),确保前端服务已在http://localhost:5173等地址监听 - 再在 VSCode 中选中上面那个 launch 配置,按
F5—— 此时 Rust 进程启动,自动连接前端,断点命中逻辑才真实有效
前端改代码没热更新?检查 tauri.conf.json 的 devPath
热更新失效和调试无关,但常被误认为是调试配置问题。根本原因是 Tauri 启动后端时,不知道该从哪拉前端资源。
立即学习“前端免费学习笔记(深入)”;
- 打开
tauri.conf.json,定位到build.devPath字段 - 如果前端用 Vite,默认值应为
"http://localhost:5173";若你改了 Vite 端口(比如设成 3000),这里必须同步改 - 不能写成
"../dist"或"./dist"—— 那是生产构建路径,开发时无效 - 改完保存,重启
pnpm run dev和 VSCode 调试会话,否则新配置不加载
真正卡住人的地方从来不是“怎么加断点”,而是 Rust 工具链、Cargo workspace、Tauri 运行时三者之间的符号加载时机不一致。哪怕只漏掉根目录的 Cargo.toml,或者用 tauri dev 代替 cargo run 启动,断点都会静默失效——没有报错,只是不触发。
















