尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Boostnote 调试实战指南:使用 Chrome DevTools 与 VS Code 调试 Electron 应用

Boostnote 调试实战指南:使用 Chrome DevTools 与 VS Code 调试 Electron 应用 知识管理桌面应用【免费下载链接】BoostNote-LegacyThis repository is outdated and new Boost Note app is available! Weve launched a new Boost Note app which supports real-time collaborative writing. https://github.com/BoostIO/BoostNote-App项目地址https://gitcode.com/gh_mirrors/bo/BoostNote-Legacy点击查看免费下载导读Boostnote 是一款基于 Electron 构建的开源 Markdown 笔记应用其界面渲染层运行在 Chromium 之上。本文以仓库内 docs/pt_BR/debug.md 官方调试文档为主体结合仓库源码package.json、lib/main-menu.js、browser/main/DevTools 等展开系统讲解两条主流的调试路径一是直接使用 Chrome Developer Tools 在应用内排查运行时错误与设置断点二是借助 VS Code 的 Debugger for Chrome 插件对 Boostnote 的主进程Main与渲染进程Renderer分别下断点。读完本文你将掌握 Boostnote 源码调试的完整工作流并能将其迁移到任意 Electron 项目的调试实践中。该文档另有 日文版、韩文版、俄文版、简体中文版、法文版 与 德文版 可对照阅读。调试前先理解 Boostnote 的双进程模型Boostnote 与所有 Electron 应用一样运行时会拉起两类进程主进程Main Process负责应用生命周期、原生菜单、窗口管理等系统级能力对应仓库中的 lib/main-app.js、lib/main-window.js、lib/main-menu.js 等文件渲染进程Renderer Process负责界面与业务逻辑对应 browser/main/Main.js 及其下的大量 React 组件与 browser/main/store.js 状态管理代码。从调试视角看这意味着「渲染层报错」如某个 React 组件抛异常和「主进程报错」如菜单点击无响应分别发生在不同的执行环境中本文后续两种调试方案都会围绕这两个进程展开。使用 Chrome Developer Tools 调试由于 Boostnote 基于 Chromium其渲染进程完全可以使用与 Google Chrome 相同的 Developer Tools开发者工具进行调试。开启与关闭 Developer Tools在应用窗口内即可切换 Developer Tools 的开关开启后的界面与 Chrome 浏览器中的开发者工具一致包含 Elements、Console、Sources、Network 等面板。除了交互式开关仓库的菜单实现也提供了对应的内置入口。查看 lib/main-menu.js 的源码可以看到{ label: Toggle Developer Tools, accelerator: CommandOrControlAltI, click() { BrowserWindow.getFocusedWindow().toggleDevTools() } }也就是说你可以通过以下任意一种方式开关 DevTools点击菜单栏View视图→ Toggle Developer Tools使用快捷键CtrlAltImacOS 上为CmdAltI。菜单项背后调用的是 Electron 的BrowserWindow.getFocusedWindow().toggleDevTools()API这是 Electron 提供的原生能力与普通网页开发相比无需任何额外配置。在 Console 面板查看运行时错误当应用运行时发生异常例如某个笔记渲染失败、某个回调函数抛错错误信息会显示在 Developer Tools 的Console控制台面板中。你可以借此快速定位报错堆栈、定位到对应的源码文件并配合 Sources 面板查看变量状态。值得注意的是为了便于调试开发构建的 webpack 配置开启了源码映射source map。查看 webpack.config.js 可以看到devtool: cheap-module-eval-source-map的配置这意味着 Console 中的堆栈信息能够映射回原始的 ES6/JSX 源码而不是压缩混淆后的产物极大提升了定位效率。使用 debugger 语句设置断点在需要断点停顿的代码位置直接写入debugger语句是调试中最直观的方式之一。例如在某个事件处理函数中加入function handleSave(note) { debugger // 代码执行到此处时DevTools 会自动暂停 saveNote(note) }当应用运行到该语句时Developer Tools 会像浏览器调试一样自动进入暂停状态此时可以在 Scope 面板中查看局部变量、在 Call Stack 面板中回溯调用链。上面的写法只是一个示意性示例实际调试时完全可以根据自己的习惯选择使用debugger语句、Sources 面板的断点行号、条件断点或者console.log日志输出等多种方式。使用 Visual Studio Code 调试对于习惯在 IDE 内完成「改代码 → 断点 → 复现 → 观察」闭环的开发者官方文档提供了基于 VS Code 的调试方案具体步骤如下。第 1 步安装 Debugger for Chrome 插件在 Visual Studio Code 中安装Debugger for Chrome插件安装完成后重启 VS Code 使插件生效。第 2 步启动 Boostnote 的构建任务在 VS Code 中按下ShiftCommandBWindows/Linux 上为CtrlShiftB或从顶部Terminal菜单选择Run Build Task然后选择名为Build Boostnote的任务也可以在终端中直接执行yarn run watch该命令在 package.json 中定义为webpack-dev-server --hot即启动带热更新HMR的 webpack dev server。查看 dev-scripts/dev.js 的源码可以看到完整的开发启动流程启动webpack-dev-server监听localhost:8080端口等待首次打包成功后通过spawn(electron, [--hot, ./index.js])拉起 Electron 应用打包出错时会在终端打印编译错误并退出。也就是说yarn run watch或Build Boostnote任务会同时完成「编译前端资源」与「启动应用」两件事是进行源码级调试的前提。只有构建任务处于运行状态VS Code 才能将源码中的断点与运行中的进程对应起来。第 3 步打开 Debug 视图当上述构建任务正常运行后点击 VS Code 左侧Activity Bar活动栏中的Debug调试图标或使用快捷键ShiftCommandDWindows/Linux 上为CtrlShiftD打开调试视图。第 4 步选择 Boostnote All 配置并启动调试在调试视图顶部的Debug configuration调试配置下拉框中选择名为Boostnote All的配置然后点击绿色箭头按钮或直接按下F5开始调试。第 5 步在 Main 与 Renderer 两个进程间切换断点调试启动后你应该能看到 Boostnote 正常运行。此时 VS Code 的调试器列表中会出现两个进程Boostnote Main对应 Electron 主进程Boostnote Renderer对应渲染进程。现在你可以在 VS Code 的源码中任意设置调试断点。需要注意如果某个断点显示为「未验证」unverified即灰色空心圆点说明当前调试器连接的是错误的进程——此时需要切换到Boostnote Renderer与Boostnote Main中与断点所在文件相对应的那个进程。这是 Electron 双进程架构下最常见的调试陷阱。调试参考要点主进程相关代码窗口、菜单、IPC 等的断点应落在Boostnote Main上可关注 lib/main-app.js、lib/main-menu.js渲染层代码React 组件、编辑器、状态管理的断点应落在Boostnote Renderer上可关注 browser/main 目录Electron 官方对应用调试有专门的教程application-debuggingDebugger for Chrome 插件的使用方式可参考其官方文档本文不再赘述。开发模式下的额外调试利器除了上述两种通用方案Boostnote 仓库还在开发模式下内置了几项针对性调试工具可大幅提升调试效率。Redux DevTools状态管理调试仓库在开发模式NODE_ENV development下会启用 redux-devtools。查看 browser/main/DevTools/index.dev.js 的源码const DevTools createDevTools( DockMonitor toggleVisibilityKeyctrl-h changePositionKeyctrl-q defaultIsVisible{false} LogMonitor themetomorrow / /DockMonitor )同时 browser/main/store.js 中仅在开发环境下通过DevTools.instrument()包装 createStore而生产环境走 browser/main/DevTools/index.prod.js 的空实现渲染为一个空div /。因此在开发模式下可以通过CtrlH切换 Redux 调试面板的显示/隐藏用CtrlQ调整面板停靠位置借助 LogMonitor 可以逐条回放每一个 Redux action 的派发与状态变更对排查笔记数据流、存储切换等问题非常有帮助生产构建完全不会携带这部分调试逻辑不会影响最终用户体验。electron-debug 与 devtron从 package.json 的 devDependencies 可以看到仓库还依赖了electron-debug与devtron两个调试相关库electron-debug用于在开发环境中自动开启一些调试便利功能如快捷开关 DevToolsdevtron是 Electron 官方出品的 DevTools 扩展提供对 IPC 通信、事件监听、进程信息等的可视化检查能力。这些工具与上文两种调试方案配合使用可以覆盖从「界面渲染」到「主进程通信」再到「状态管理」的完整调试链路。调试要点速查调试需求推荐手段对应仓库位置查看渲染层运行时错误Chrome DevTools 的 Console 面板lib/main-menu.js 中的 Toggle Developer Tools 菜单在指定代码位置暂停debugger语句或 DevTools Sources 面板断点任意渲染层源码如 browser/main/Main.js完整断点调试含主进程VS Code Debugger for Chrome配置 Boostnote Allpackage.json 的watch脚本dev-scripts/dev.js跟踪 Redux 状态流转开发模式下的 Redux DevToolsCtrlH 切换browser/main/DevTools/index.dev.jsbrowser/main/store.js检查主进程与 IPCdevtron / electron-debugpackage.json 的 devDependencies最后再强调两点其一无论是 DevTools 还是 VS Code 断点本质都是依赖 Electron 基于 Chromium 的调试协议掌握进程归属Main 还是 Renderer是成败关键其二本文所有命令与配置均以当前仓库Boostnote 0.16.1Electron 4为准若使用其他版本请以对应版本的源码与文档为准。赞分享知识管理桌面应用【免费下载链接】BoostNote-LegacyThis repository is outdated and new Boost Note app is available! Weve launched a new Boost Note app which supports real-time collaborative writing. https://github.com/BoostIO/BoostNote-App项目地址https://gitcode.com/gh_mirrors/bo/BoostNote-Legacy点击查看免费下载相关推荐Electron调试技巧Chrome DevTools与VS Code集成Electron调试技巧Chrome DevTools与VS Code集成 还在为Electron应用调试而烦恼本文为你揭秘Chrome DevTools与桌面应用跨平台前端Electron API Demos开发调试配置VS Code与Chrome DevToolsElectron API Demos开发调试配置VS Code与Chrome DevTools Electron API Demos作为官方交互式API演示应示例工程桌面应用PandaWiki如何通过AI驱动构建企业级知识管理系统的完整指南PandaWiki如何通过AI驱动构建企业级知识管理系统的完整指南 PandaWiki作为一款AI大模型驱动的开源知识库搭建系统为技术决策者和项目管理者提供后端前端人工智能AI 应用RAG知识管理上一篇GetQzonehistory终极指南5分钟学会备份QQ空间所有历史说说下一篇FrankenPHP 高效服务大文件X-Sendfile / X-Accel-Redirect 配置与实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表