electron 调试、问题追踪
文章目录
- 前言
- 一、调试工具
- 1. 生产环境调试工具 bugtron
- 2. 日志
- 1. 业务日志
- 2. 网络日志
- 3. 崩溃报告
- 二、捕获全局异常
- 1. 开发网页时:
- 2. 在electron中全局异常捕获:
- 3. 从异常中恢复
- 保护用户界面
- 总结
前言
开发一个优秀的客户端GUI程序,调试测试工作必不可少。下面让我们一起学习吧。
一、调试工具
1. 生产环境调试工具 bugtron
字节跳动公司的工程师开发的Debugtron(https:// github.com/bytedance debugtron)可以帮助开发者完成这项工作。Debugtron是一个基于Electron开发的客户端桌面 GUI 程序,它就是为调试生产环境下的 Electron 应用而生的。
下载地址 https://www.electronjs.org/apps/debugtron
2. 日志
1. 业务日志
import log from "electron-log"
控制台也会显示相关打印
默认安装地址
appa.getPath("userData")//C:\Users\xx\AppData\Roaming\项目名称\logs
log.info("info")
log.warn("warn")
log.error("error")
log.verbose("verbose")
log.silly("silly")
//分渲染进程 和 主进程
[2022-07-22 13:48:51.175] [error] 1233333
[2022-07-22 13:50:21.182] [error] 1233333
[2022-07-22 14:26:29.360] [info] createWindow
[2022-07-22 14:26:44.148] [info] createWindow Load complete
[2022-07-22 14:26:51.916] [info] createWindow Load complete
[2022-07-22 14:27:10.568] [info] createWindow Load complete
[2022-07-22 14:27:14.627] [info] createWindow Load complete
2. 网络日志
- 一般情况,我们可以通过渲染进程的开发者调试工具即可查看应用的网络请求,如图
- 主进程 利用electron提供的netLog模块,允许开发人员通过变成的方式记录网络求数据
let remote = require("electron");await remote.netlog.startLogging("E:\\net.log");let ses = remote.getCurrentWebContents().sessionlet xhr = new XMLHttpRequest();
xhr.open("GET","https://www.baidu.com");
xhr.onload = async () => {console.log(xhr.responseText);
await remote.netLog.stopLogging()
};
xhr.send();
3. 崩溃报告
Electron 内置了崩溃报告上报模块 crashReporter,开发者可以利用此模块收集应用程序崩溃时的环境情况和异常数据,并让应用程序把这些数据提交到一个事先指定好的服务器上。
let electron=require('electron');
electron.crashReporter.start({productName:'YourName',
companyName:'YourCompany',
submiturL:'http://localhost:8989/' uploadToServer:true1);
})
二、捕获全局异常
1. 开发网页时:
当页中有异常发生时,会触发window的onerror事件,开发者可以在此事件中收集
日志、显示异常提示信息或重新加载应用。但以这种方式捕获异常后,异常依旧存开发者工具控制台还会输出异常。
window.onerror=function (){//收集日志//显示异常提示信息或者重新加载应用}
2. 在electron中全局异常捕获:
这种方式是利用 Node.js 技异常,这种方式捕获异常后,异常会被
对于应用程 因为 process Nodejs变量,所以在进程和渲染进程中都可以使用这种方
吃掉”,开者工具制台也不会再输出任何异常提示信息了。
process.on('uncaughtException',(err,origin)=>{//收集日志//显示异常提示信息或者重新加载应用
})
3. 从异常中恢复
上述中崩溃报告服务只能在应用崩溃时自动发送崩溃报告,但我们并不能确切地通过它知道应用程序何时崩溃了。Electron提供了两个事件来帮助开发者截获渲染进程崩溃或挂起的事件。
可以通过监听渲染进程的crashed事件来获悉渲染进程何时发生了崩xun溃错误,代码如下所示:
let { dialog}=require('electron');
win.webContents.on("crashed", async (e, killed) => (
//应加入收集日志的逻辑
let result = await dialog.showMessageBox({type: "error",title: "应用程序崩溃",message: "当前程序发生异常,是否要重新加载应用程序?",buttons: ["是", "否"],})if (result.response == 0) win.webContents.reload();else app.quit();
以上代码在主进程中监听 webContents 的crashed 事件,一旦渲染进程崩溃,系统将弹出一个友善的提示对话框,如图
我们可以使用如下代码模拟渲染进程崩溃或挂起:
//模拟进程崩渍
process.crash();//模拟进程挂起
process.hang();
需要注意的是,因为渲染进程是受控的,所以才有这两个事件提供给开发者,允许开发者监控异常并从异常中恢复。但主进程并没有类似的事件提供给开发者,开发者可以考虑使用process的’uncaughtException事件,在此事件中收集日志并重启应用。
保护用户界面
很多黑客工具会捕获你的窗口,然后通过模拟鼠标和键盘来操作你的窗口、输入数据,用机器模拟操作等。由于他看起来像真是用户一样,对于开发者来说这种黑客防不胜防。所以electron为我们提供了这样的API。
执行后,如果再有类似黑客工具捕获你的窗口,window环境下将显示一块黑色区域,应用窗口拒绝被铺货。代码如下:
//防止黑客攻击win.setContentProtection(true);
总结
本篇内容 借鉴书籍 《Electron 实战 入门 进阶与性能优化》
electron 调试、问题追踪相关推荐
- .Net程序调试与追踪的一些方法
前言 作为一个.net开发工程师,不管是在写桌面程序.服务程序或web程序,在开发阶段,我们必须非常熟悉vs的动态调试技能,当然web程序可能还需要调试前端的脚本或样式,这不在本文的讨论范围.本文主要 ...
- electron调试攻略
2019独角兽企业重金招聘Python工程师标准>>> electron调试攻略 写在前面的话 通过对electron 快速入门的学习,可以得知electron是基于Node.js和 ...
- electron调试html,electron桌面应用程序开发入门
一.初始化一个项目 官方文档:https://electronjs.org/docs 新建一个文件夹electron-demo 然后 cd electron-demo npm init npm i e ...
- electron 调试
electron debugger 在开发过程中我们经常需要对某一功能进行调试,electron也不例外. electron有主进程和渲染进程,所以调试部分也分为两大块,即调试主进程和渲染进程 渲染进 ...
- electron 打开调试_【Electron】Electron 调试
electron有主进程和渲染进程,所以调试部分也分为两大块,即调试主进程和渲染进程 一.调试渲染进程 调试渲染进程和调试浏览器的方法基本差不多.在运行electron 应用之后可以通过下面两种方式打 ...
- 实战能力|一文看懂GDB调试底层实现
在程序出现bug的时候,最好的解决办法就是通过 GDB 调试程序,然后找到程序出现问题的地方.比如程序出现 段错误(内存地址不合法)时,就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的. ...
- sql 没有调试 菜单_关于ThinkPHP5.1+的Log无法记录SQL调试记录的小经历
项目开发阶段,除了基本编码外,性能也需要实时关注与优化.之前我的大部分项目都是使用ThinkPHP5.0以及ThinkPHP3.2,对于框架提供的日志记录和日志配置都差不多,然后使用ThinkPHP5 ...
- GDB调试之ptrace实现原理
目录 ptrace系统调用 ptrace使用示例 ptrace实现原理 进入被追踪模式(PTRACE_TRACEME操作) 获取被调试进程的内存数据(PTRACE_PEEKTEXT / PTRACE_ ...
- centos下打包electron_从零搭建Electron应用 的一系列简单的 Demo
Electron 是一个优秀的跨平台桌面应用程序开源库,目前接触 Electron 的开发者也越来越多.但是笔者发现,目前社区里缺少对初学者足够友好的入门教程来帮助初学者用 Electron 搭建一个 ...
- Linux 内核测试和调试
自动测试工具 这里列出一些能满足不同需求的测试工具供你选择.本小节只是简单介绍个大概,并不提供详细操作指南. AuToTest AuToTest 是一个全自动测试框架,存在的主要目的就是测试 Linu ...
最新文章
- c语言标准库低通的qsort函数不适宜所有排序任务的原因
- 无路可逃java攻略_生化危机2重制版无路可逃怎么过_100丧尸模式幽灵生还者无路可逃流程攻略_3DM单机...
- java中读取文件的方法
- [abap] 通过动态参数获取字段数据
- JDK源码解析之 Java.lang.Boolean
- SAP MM ‘Pricing Date Control‘字段的理解
- C语言宏的高级应用-转
- 汽车短视频大行其道,新能源汽车平台杉车网如何“领风骚”?
- 列表、表格与媒体元素
- 创建Struts 2简单应用的流程
- IDEA快捷键整理(最详细的)
- Playmaker节点工具使用(二)—Odin绘制支持
- linux系统网络代理设置
- Briss-最好用的pdf裁边工具
- u盘数据丢失了怎么恢复?u盘数据恢复,2个方案完成
- 网站做SEO优化的5个理由
- 常用计算机信息检索策略,信息检索的策略和方法
- MySQL攻略(1)
- VisionPro斑点工具CogBlobTool
- List的contains()方法
热门文章
- Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
- 网络无法找到计算机6,手机可以搜到WiFi6路由器的信号,电脑却搜不到这是怎么回事?...
- vue中你真的理解v-modle基础理解和使用吗?
- 亚马逊AWS使用计费问题
- 从“七宗罪”角度,看互联网产品与人性的深沉纠缠
- java access group by 用法_详解SQL中Group By的用法
- 可达编程 [语言题]中国身份证号码校验
- 4月6日----4月10日二年级课程表
- spring security自定义登录失败返回错误信息
- 晨曦 - 江湖一剑客