electron 打开调试_Electron 应用调试指南

Electron 是一个基于 Node.js 和 Chromium 的开源框架,用于构建桌面应用,开发者可以使用 web 技术(HTML,JavaScript 和 CSS)完成整个应用的开发。许多知名桌面应用基于 Electron 实现,如 VSCode,Slack 和 GitHub Desktop 等。本文将介绍调试 Electron 应用的一些常用方法。

开发环境调试

Electron 应用进程分为主进程和渲染进程,其底层实现分别对应于 Node.js 和 Chromium。所以调试 Electron 应用的方式也基本等价于这两者的结合,目前社区提供的方案已经比较完善了。

调试主进程

Electron 主进程是一个 Node.js 进程。Node.js 在 8 之后引入了 --inspect 参数用于调试,同样也适用于 Electron 主进程:

./node_modules/.bin/electron . --inspect

默认会监听 9229 端口,应用启动后,在 Chrome 浏览器(或其他基于 Chromium 开发的浏览器)中打开 chrome://inspect 即可看到对应的调试会话,点击会话链接即可打开 devtools 进行调试。

另外,可以在命令行参数中指定端口号,实现同时调试多个应用中的多个进程而不产生冲突:

./node_modules/.bin/electron . --inspect=1234

调试渲染进程

仅从调试的角度来看,Electron 的渲染进程可以简单地理解为是 Chromium 的一个窗口。所以基本和 Chrome 浏览器中的调试网页方式是一致的,即 focus 到当前窗口后,使用 Ctrl+Shift+I(macOS 下是 Cmd+Option+I)快捷键即可打开 devtools。使用上也是一致的。

快捷键的方式在某些特殊情况下可能无法达到预期效果,比如窗口是隐藏的,无法 focus 到窗口。此时可以在代码中使用 Electron 提供的 JavaScript API 来打开 devtools:

const mainWindow = new BrowserWindow()

mainWindow.loadURL('file://path/of/index.html')

mainWindow.webContents.openDevTools()

上述演示代码会在加载 HTML 文件之后执行打开 devtools 的操作。在实际使用中,将其放置到需要的位置即可。

在 VSCode 中调试

上述方法均会打开 devtools 界面,所有的调试操作均在 devtools 中进行。对于某些操作比如代码断点调试,可以进一步与编辑器或 IDE 相结合,提升开发体验。以下将简要介绍如何在 VSCode 进行调试。

以 Electron 官方的模板 electron-quick-start 为例,首先需要为 VSCode 安装一个扩展:Debugger for Chrome(用于调试渲染进程)。克隆代码仓库到本地并安装依赖:

git clone https://github.com/electron/electron-quick-start.git

cd electron-quick-start

npm install

然后在仓库中添加文件 .vscode/launch.json,内容如下:

{

"version": "0.2.0",

"configurations": [

{

"type": "node",

"request": "launch",

"name": "Main",

"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",

"runtimeArgs": ["--remote-debugging-port=9222", "."],

"windows": {

"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"

}

},

{

"name": "Renderer",

"type": "chrome",

"request": "attach",

"port": 9222,

"webRoot": "${workspaceFolder}"

}

],

"compounds": [

{

"name": "All",

"configurations": ["Main", "Renderer"]

}

]

}

然后在 VSCode 左侧选择 debug 面板,启动 All 这一项开始调试,此时就可以在 main.js 或 renderer.js 文件中添加断点了:

配置文件中的一些要点解释如下:configurations 中的两项分别对应主进程和渲染进程。compounds 中指定了一个组合会话 All,选择 All 将会同时启动这两个会话。

Renderer 配置中的 webRoot 参数直接使用了 ${workspaceFolder},是因为在这个工程中,HTML 引用的静态资源位于根目录下。实际使用的时候需要更新到对应的路径才会生效。

实际开发中可能会有编译的流程,比如使用 TypeScript 配合打包工具 Webpack,最终生成的代码与源代码并不在一个路径下。这种情况下需要产出 source map 来建立映射关系。

生产环境调试

生产环境的情况比开发环境要复杂一些。一般来说,我们希望有一个入口可以打开 devtools,以便在出现问题的时候能够方便调试;而另一方面,这个入口与产品本身无关,我们希望它对用户隐藏。一个比较常见的方案是:指定一套私有的快捷键,监听对应事件并在回调中调用 JavaScript API 来打开 devtools,并将快捷键设置为复杂的组合,以降低用户误触的概率。

快捷键方案确实有一定可行性,不过并没有从根本上解决这个问题。所以这里推荐使用 Debugtron 进行调试。Debugtron 是一个调试生产环境 Electron 应用的工具,无需在客户端集成任何代码。它本身也基于 Electron 构建,支持多个平台。

下载最新版本安装并打开 Debugtron 后,会检测并展示所有已安装的 Electron 应用:

点击图标后会进入调试环节。以 Electron Fiddle 为例,点击图标启动后,面板左侧会显示可调试的会话列表,包括主进程和渲染进程,可以根据标签来区分。右侧会显示主进程启动的日志:

在左侧的会话列表中选择一项,点击后会弹出对应的 devtools,可以在其中看到错误日志并定位问题,和开发环境完全一致。同时也支持调试多个应用,启动多个应用后可以在 tab 区切换。

总结

Electron 的调试方案已经比较完善,在开发环节,主进程和渲染进程都能够很方便地打开 devtools 进行调试;而且这个工作流还可以深度集成到 VSCode 中,提升开发体验。

对于生产环境的情况,可以使用 Debugtron 进行调试,无需在客户端集成额外的代码即可获得与开发环境基本一致的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中方法的命名_Java方法中的参数太多,第5部分:方法命名

java中方法的命名在上一篇文章 (有关处理Java方法中过多参数的系列文章的 第4部分 )中,我将方法重载视为一种向客户提供需要较少参数的版本的方法或构造函数的方法。 我描述了该方法的一些缺点,并建议从方法重载中摆脱出来以使用不…

oracle lms进程 内存,Oracle RAC 内存融合(Cache Fusion)

原标题:Oracle RAC 内存融合(Cache Fusion)内存融合核心进程LMS(Global Cache Service Process):这个进程负责完成GCS的大部分工作,它会维护GRD中数据块资源的信息,完成数据块在实例之间的传递工作,相关消息的发送和接…

sougou ubuntu 优麒麟_搜狗输入法 Linux – V2.3 版发布,完美适配优麒麟 19.10

搜狗输入法 Linux – V2.3 版发布,完美适配优麒麟 19.10fenshezhuiyi2 2019年10月19日 暂无评论 阅读 4,346 次昨天已发布优麒麟操作系统 19.10 版本,该版本集成了全新的控制面板和软件商店,不知道大家是否已下载体验。今天小编要为大家介绍一…

oracle多条sql语句常量,如何在Oracle中一次执行多条sql语句

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式:beginupdate TB_VG set seq 1, vessel_id Jin14, vessel_type TRACK where batch_number 20837 and train_id 0233086;update TB_…

JDK 11:新的默认收集方法toArray(IntFunction)

“ JDK 11 Early-Access发行说明 ”表明JDK 11的Early Access Build 20在Collection接口上包括一个新的默认方法 ,该方法 “允许将集合的元素转移到所需运行时类型的新创建的数组中”。 这个新的默认方法 [ Collection.toArray(IntFunction) …

获取清空textarea的文字内容_运用|你会做 词云图(文字云) 吗?

词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。今天,兰色就分享一下词云图的做法。制作步骤:1、打开词云图网站打开网页https://wordart…

oracle today函数,oracle日期函数集锦

一、 常用日期数据格式1.Y或YY或YYY 年的最后一位,两位或三位SQL> Select to_char(sysdate,Y) from dual;TO_CHAR(SYSDATE,Y)--------------------7SQL> Select to_char(sysdate,YY) from dual;TO_CHAR(SYSDATE,YY)---------------------07SQL> Select to_…

kali查看共享 linux_在Linux下访问Windows共享文件夹

在Linux下访问Windows共享文件夹说明以下操作以Ubuntu为例,大家可以参考。我在Ubuntu 14.04和16.04都试过了。Windows共享文件夹如果局域网内有一台Windows主机,将指定文件夹设为共享,就可以在局域网内访问了。如果要从Linux下访问该如何操作…

oracle 11gdata guard,Oracle 11g Data Guard配置

操作环境说明:两台服务器使用相同的Redhat 5.5内核版本为:2.6.18-194.el5在主库(primary database)中提前安装好了Oracle 11gR2软件,通过DBCA创建了数据库,实例名为PRIMARY备库(standby database)中只安装了Oracle 11gR2软件&…

java 可变参数方法_Java方法中的参数太多,第7部分:可变状态

java 可变参数方法在我的系列文章的第七篇中,有关解决Java方法或构造函数中过多参数的问题 ,我着眼于使用状态来减少传递参数的需要。 我等到本系列的第七篇文章来解决这个问题的原因之一是,它是我最不喜欢的减少传递给方法和构造函数的参数的…

联想笔记本e480恢复出厂设置_联想e480进入bios设置_thinkpade480进入bios的方法

ThinkPad E480笔记本win10改win7如何修改BIOS设置?想要将预装win10系统换成win7系统,最重要的一步就是修改bios设置,这样才能在装机过程中不受到报错困扰,所以今天快启动小编为大家分享了详细图文教程,一起来看看吧。ThinkPad E4…

oracle一页显示15行,oracle rownum分页与显示记录小测

同事问及关于rownum表记录不显示问题,经查阅官方手册,附上测试笔记:SQL> insert into t_rownum select level from dual connect by level<5;5 rows insertedSQL> commit;Commit completeSQL> select * from t_rownum;A---------------------------------------123…

自动化用户特定实体的访问控制

实际上&#xff0c;每个Web应用程序都应该有多个用户&#xff0c;每个用户都有一些数据-帖子&#xff0c;文档&#xff0c;消息等等。 最明显的事情是保护这些实体免遭非这些资源合法所有者的用户获取。 不幸的是&#xff0c;这不是最容易的事情。 我并不是说很难&#xff0c;…

sqlserver安装显示句柄无效_Sqlserver 2016 R Service环境安装的各种错误(坑)解决办法...

相信很多朋友都会慕名Sqlserver 2016的R语言功能&#xff0c;将自己的数据库升级到Sqlserver 2016&#xff0c;但是当你安装完Sqlserver 2016的R语言组件之后&#xff0c;你会发现并不能直接使用&#xff0c;比如当你在SSMS中执行下面这段测试R语言命令的时候&#xff0c;Sqlse…

oracle用一个字段往上递归,深入sql oracle递归查询

获取数据库所有表名&#xff0c;表的所有列名 select name from sysobjects where xtypeuselect name from syscolumns where id(select max(id) from sysobjects where xtypeu and name表名)查询数据sql语句里的递归查询 sqlServer2005和Oracle 两个版本以前使用Oracle&#x…

如何在Spring Boot App中集成H2数据库

你好朋友&#xff0c; 在本教程中&#xff0c;我们将尝试探索如何在Spring Boot应用程序中与H2数据库集成。 在进行检查之前&#xff0c;让我们了解有关H2数据库的一些基础知识&#xff0c;如下所述&#xff0c;然后我们将讨论H2数据库与Spring Boot的集成。 什么是H2数据库…

python在路径里添加变量_想学Python?那就先从头开始吧!

作为人工智能和大数据时代最具竞争力的 Python 语言&#xff0c;越来越多的出现在各大编程热搜排行榜上。首先你要了解什么是python了解Python语言Python是一种解释型, 面向对象, 动态数据类型的高级程序设计语言.Python由Guido van Rossum&#xff08;荷兰&#xff09; 于1989…

php生成16位不重复随机码,PHP n个不重复的随机数生成代码

复制代码代码如下://range是将1到100列成一个数组$numbersrange(1,100);//shuffle将数组顺序随即打乱shuffle($numbers);//array_slice取该数组中的某一段$no6;$resultarray_slice($numbers,0,$no);for($i0;$iecho$result[$i]."";}print_r($result);?>复制代码代…

ant 走马灯面板指示显示不出来_触摸屏报警信息显示设置方法

人机界面(HMI)是自动化设备中非常常用的器件&#xff0c;用于替代操作面板上的实体按钮或者显示指示。人机界面的适用极大的减小了设备操作面板的尺寸&#xff0c;提升了设备的整体美观度。随着自动化设备的自动化程度的提高&#xff0c;也对设备的报警信息提出了更高的要求。如…

oracle bbed 使用,Oracle BBED使用 四步快速启动Oracle BBED

Oracle BBED使用&#xff0c;四步快速启动Oracle BBED&#xff0c;环境&#xff1a;Oracle 10g RHEL 5.8&#xff0c;介绍&#xff1a;BBED全称为数据块浏览和编辑。用于对Oracle blo环境&#xff1a;Oracle 10g RHEL 5.8介绍&#xff1a;BBED全称为数据块浏览和编辑。用于对Or…