内容目录
背景
同事写electron软件,在特殊情况下会闪退,不是JS错误
思考
- 这种闪退崩溃,基本都是内存问题,基本都是调用系统API,不是简单的JS代码
- 鼠标切换程序特殊情况会崩溃,猜测是设置窗口有关系
解决方案
- 通过生成Dump 文件,看具体崩溃到哪个API
- 注释代码,对比排查
通过dump文件分析解决
- 在windbg 设置 electron pdb
- 在electron js 代码捕获程序异常推出,生成对应dump 文件
- 使用命令查看回调,大概就知道崩溃哪个API上
- 最后定义在获取窗口标题,给的内存大小太小了,当窗口标题超过255就崩溃了,同事直接抄AI代码,根本没有完全了解代码逻辑
资料
补充
上面网页资料设置是无法下载pdb,我最近发现electron 在windows 2022 上面会闪退,我开始想通过windbg调试,因为之前Pdb被我删除了,于是我按照上面的教程直接设置下载对应pdb地址,我发现是没有用,永远下载不下来,所以只能手动设置
手动下载pdb
- 打开electon github
- 找到你的自己用electron 的版本(node工程package.json 找到对应版本就可以)
- https://github.com/electron/electron/releases/ 一页 一页翻
- 快速的方法 https://github.com/electron/electron/releases/tag/v38.2.2 v38.2.2 这个我是测试版本号,你可以换成你自己的版本,如果对的上就可以直接打开了
- 下载 electron-v38.2.2-win32-x64-pdb.zip (这个是我的版本),这个大小1个G,不要下载小的,这个是windows的对应的版本
- 剩下就是windbg 设置了
总结
- 开始直接windbg 分析,没有加载pdb导致定义不到对应的API,看不出来有什么问题,所以一定要下载PDB
- electron崩溃基本都是内存,因为JS很难导致崩溃,只有内存问题才容易出现