文章目录

  • 前言
  • 一、调试工具
    • 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. 网络日志

  1. 一般情况,我们可以通过渲染进程的开发者调试工具即可查看应用的网络请求,如图
  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 调试、问题追踪相关推荐

  1. .Net程序调试与追踪的一些方法

    前言 作为一个.net开发工程师,不管是在写桌面程序.服务程序或web程序,在开发阶段,我们必须非常熟悉vs的动态调试技能,当然web程序可能还需要调试前端的脚本或样式,这不在本文的讨论范围.本文主要 ...

  2. electron调试攻略

    2019独角兽企业重金招聘Python工程师标准>>> electron调试攻略 写在前面的话 通过对electron 快速入门的学习,可以得知electron是基于Node.js和 ...

  3. electron调试html,electron桌面应用程序开发入门

    一.初始化一个项目 官方文档:https://electronjs.org/docs 新建一个文件夹electron-demo 然后 cd electron-demo npm init npm i e ...

  4. electron 调试

    electron debugger 在开发过程中我们经常需要对某一功能进行调试,electron也不例外. electron有主进程和渲染进程,所以调试部分也分为两大块,即调试主进程和渲染进程 渲染进 ...

  5. electron 打开调试_【Electron】Electron 调试

    electron有主进程和渲染进程,所以调试部分也分为两大块,即调试主进程和渲染进程 一.调试渲染进程 调试渲染进程和调试浏览器的方法基本差不多.在运行electron 应用之后可以通过下面两种方式打 ...

  6. 实战能力|一文看懂GDB调试底层实现

    在程序出现bug的时候,最好的解决办法就是通过 GDB 调试程序,然后找到程序出现问题的地方.比如程序出现 段错误(内存地址不合法)时,就可以通过 GDB 找到程序哪里访问了不合法的内存地址而导致的. ...

  7. sql 没有调试 菜单_关于ThinkPHP5.1+的Log无法记录SQL调试记录的小经历

    项目开发阶段,除了基本编码外,性能也需要实时关注与优化.之前我的大部分项目都是使用ThinkPHP5.0以及ThinkPHP3.2,对于框架提供的日志记录和日志配置都差不多,然后使用ThinkPHP5 ...

  8. GDB调试之ptrace实现原理

    目录 ptrace系统调用 ptrace使用示例 ptrace实现原理 进入被追踪模式(PTRACE_TRACEME操作) 获取被调试进程的内存数据(PTRACE_PEEKTEXT / PTRACE_ ...

  9. centos下打包electron_从零搭建Electron应用 的一系列简单的 Demo

    Electron 是一个优秀的跨平台桌面应用程序开源库,目前接触 Electron 的开发者也越来越多.但是笔者发现,目前社区里缺少对初学者足够友好的入门教程来帮助初学者用 Electron 搭建一个 ...

  10. Linux 内核测试和调试

    自动测试工具 这里列出一些能满足不同需求的测试工具供你选择.本小节只是简单介绍个大概,并不提供详细操作指南. AuToTest AuToTest 是一个全自动测试框架,存在的主要目的就是测试 Linu ...

最新文章

  1. c语言标准库低通的qsort函数不适宜所有排序任务的原因
  2. 无路可逃java攻略_生化危机2重制版无路可逃怎么过_100丧尸模式幽灵生还者无路可逃流程攻略_3DM单机...
  3. java中读取文件的方法
  4. [abap] 通过动态参数获取字段数据
  5. JDK源码解析之 Java.lang.Boolean
  6. SAP MM ‘Pricing Date Control‘字段的理解
  7. C语言宏的高级应用-转
  8. 汽车短视频大行其道,新能源汽车平台杉车网如何“领风骚”?
  9. 列表、表格与媒体元素
  10. 创建Struts 2简单应用的流程
  11. IDEA快捷键整理(最详细的)
  12. Playmaker节点工具使用(二)—Odin绘制支持
  13. linux系统网络代理设置
  14. Briss-最好用的pdf裁边工具
  15. u盘数据丢失了怎么恢复?u盘数据恢复,2个方案完成
  16. 网站做SEO优化的5个理由
  17. 常用计算机信息检索策略,信息检索的策略和方法
  18. MySQL攻略(1)
  19. VisionPro斑点工具CogBlobTool
  20. List的contains()方法

热门文章

  1. Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
  2. 网络无法找到计算机6,手机可以搜到WiFi6路由器的信号,电脑却搜不到这是怎么回事?...
  3. vue中你真的理解v-modle基础理解和使用吗?
  4. 亚马逊AWS使用计费问题
  5. 从“七宗罪”角度,看互联网产品与人性的深沉纠缠
  6. java access group by 用法_详解SQL中Group By的用法
  7. 可达编程 [语言题]中国身份证号码校验
  8. 4月6日----4月10日二年级课程表
  9. spring security自定义登录失败返回错误信息
  10. 晨曦 - 江湖一剑客