원클릭으로
bug-detective
// 排查已发生的问题、定位 Bug 原因。 触发场景: - 代码运行报错,需要定位原因 - 功能不正常,需要排查 - Tauri Command 返回错误,需要分析 - 日志分析、调试代码 触发词:Bug、报错、不工作、调试、排查、为什么、出问题、失败、不生效、无效、找不到原因、定位问题
// 排查已发生的问题、定位 Bug 原因。 触发场景: - 代码运行报错,需要定位原因 - 功能不正常,需要排查 - Tauri Command 返回错误,需要分析 - 日志分析、调试代码 触发词:Bug、报错、不工作、调试、排查、为什么、出问题、失败、不生效、无效、找不到原因、定位问题
Tauri 打包与分发技能,指导桌面端(Windows/macOS/Linux)与移动端(Android/iOS)的构建、签名和分发。 触发场景: - 需要构建生产安装包(exe/dmg/deb/apk/aab/ipa) - 需要配置各平台打包参数 - 需要代码签名(Windows 证书 / Android keystore / iOS 描述文件) - 需要减小安装包体积 - 需要设置应用图标和元数据 - 需要打包 Android / iOS App 触发词: 打包、构建、build、发布、安装包、exe、dmg、deb、apk、aab、ipa、签名、分发、release、android build、ios build、移动端打包
Git 工作流与版本管理技能,规范分支策略、提交信息和发布流程。 触发场景: - 用户需要创建分支或合并代码 - 用户需要规范提交信息格式 - 用户需要管理版本发布流程 触发词:Git、分支、提交、合并、版本发布
发布 Tauri 桌面应用新版本,处理版本号同步、Git tag、GitHub Actions 构建、Release 仓库产物同步、Cloudflare R2 上传、update.json 生成、自动更新发布和文档站重建。 触发场景: - 需要发布新版本或 release - 需要打 tag、推送发布分支或触发 CI 构建 - 需要生成或更新 update.json - 需要处理 Tauri updater 签名产物 - 需要同步 R2 CDN、GitHub/Gitee release 仓库或发布安装包 触发词:发布、release、版本发布、推送、打Tag、update.json、签名构建、安装包、自动更新、R2、CDN
排查已发生的问题、定位 Bug 原因。 触发场景: - 代码运行报错,需要定位原因 - 功能不正常,需要排查 - Tauri Command 返回错误,需要分析 - 日志分析、调试代码 触发词:Bug、报错、不工作、调试、排查、为什么、出问题、失败、不生效、无效、找不到原因、定位问题
Git 工作流与版本管理技能,规范分支策略、提交信息和发布流程。 触发场景: - 用户需要创建分支或合并代码 - 用户需要规范提交信息格式 - 用户需要管理版本发布流程 触发词:Git、分支、提交、合并、版本发布
Tauri 打包与分发技能,指导跨平台安装包构建、签名和分发。 触发场景: - 需要构建生产安装包 - 需要配置各平台打包参数 - 需要代码签名 - 需要减小安装包体积 - 需要设置应用图标和元数据 触发词: 打包、构建、build、发布、安装包、exe、dmg、deb、签名、分发、release
| name | bug-detective |
| description | 排查已发生的问题、定位 Bug 原因。 触发场景: - 代码运行报错,需要定位原因 - 功能不正常,需要排查 - Tauri Command 返回错误,需要分析 - 日志分析、调试代码 触发词:Bug、报错、不工作、调试、排查、为什么、出问题、失败、不生效、无效、找不到原因、定位问题 |
dbg!() 宏(Rust)或 console.log(TS)| 症状 | 可能原因 | 排查方法 |
|---|---|---|
| Command 调用无响应 | 函数名未在 generate_handler! 注册 | 检查 lib.rs 的 handler 列表 |
invoke 返回错误 | Rust 侧 panic 或返回 Err | 检查终端 Rust 错误输出 |
| 类型序列化失败 | struct 缺少 Serialize/Deserialize derive | 添加 #[derive(Serialize, Deserialize)] |
| State 获取失败 | 未在 Builder 中 .manage() 注册 | 检查 Builder 链式调用 |
| 编译错误 | 所有权/借用/生命周期问题 | 阅读 Rust 编译器错误提示 |
| 插件功能不可用 | Capabilities 未声明权限 | 检查 capabilities/default.json |
| 症状 | 可能原因 | 排查方法 |
|---|---|---|
| 页面空白 | JS 错误 | 打开 DevTools 控制台 (F12) |
| invoke 调用报错 | Command 名称拼写错误 | 确认 snake_case 函数名 |
| 状态不更新 | useState 闭包陷阱 | 使用函数式更新 setState(prev => ...) |
| 事件监听不生效 | 未清理旧监听器 | 在 useEffect 中返回 unlisten |
| 样式不生效 | CSS 冲突或选择器错误 | 使用 DevTools Elements 面板 |
| 页内拖拽光标显示 🚫、onDrop 不触发(antd Tree/react-dnd 等) | Tauri 窗口 dragDropEnabled 默认 true,WebView 吞掉 HTML5 dragover/drop | tauri.conf.json 窗口配置加 "dragDropEnabled": false,重启 dev |
右键菜单 Dropdown(trigger={['contextMenu']})包裹节点后 antd Tree 拖不动 | rc-trigger ref 转发 + mousedown 拦截破坏原生 drag 绑定 | 改用 Tree 级 onRightClick + 全局定位 Dropdown(幻影锚点) |
| 症状 | 可能原因 | 排查方法 |
|---|---|---|
| invoke 超时 | Rust 侧阻塞主线程 | 改用 async Command |
| 参数传递失败 | 参数类型不匹配 (camelCase vs snake_case) | 检查前后端参数名映射 |
| 返回值为空 | Rust 函数签名返回 () | 确认返回 Result<T, String> |
// println! 输出到终端
println!("Debug: {:?}", variable);
// dbg! 宏(输出文件名/行号/值)
dbg!(&my_variable);
// 使用 log crate
log::info!("Processing: {}", data);
log::error!("Failed: {}", err);
// 浏览器控制台
console.log("invoke result:", result);
console.error("invoke failed:", error);
// 检查 invoke 调用
try {
const result = await invoke("my_command", { arg1 });
console.log("Success:", result);
} catch (e) {
console.error("Failed:", e);
}
// 开发模式自动开启 DevTools
// 生产模式可通过配置开启:
// tauri.conf.json → app.windows[0].devtools = true
| 错误做法 | 正确做法 |
|---|---|
| 不看 Rust 编译器错误提示 | Rust 编译器提示非常详细,先仔细阅读 |
| 不区分前端/后端/IPC 问题 | 先确定问题在哪个层,再深入排查 |
| 不检查 Capabilities | 插件功能不可用时首先检查权限声明 |
| 只在一个平台测试 | 跨平台问题需在所有目标平台验证 |