Windows 闪退问题排查分析

这篇具有很好参考价值的文章主要介绍了Windows 闪退问题排查分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        正常程序运行出错,会被CrashRpt抓住,但是有时候没有抓住,程序就突然退出了,于是就发生了所谓的闪退。

哪些情况会闪退

项目

方式

说明

主动退出

调用exit

退出主循环

虽然不太可能,但是难免不会出现某个三方库包含了不干净的代码,埋藏了一个定时炸弹

主线程卡死

不响应系统事件

操作系统侦测到这种情况会主动杀死进程,进程没有机会捕捉异常并上报

未捕捉到异常

可能与运行的环境有关,具体原因需要进一步排查

Windows Error Report(WER)

        注册表配置项目

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\Windows Error Reporting\ (在 64位系统中运行 32 位程序)

配置项目

解释

默认值

DebugApplications\

    [Application Name]

是否调试

0

LocalDumps\[Application Name]\

需要 LocalDumps 项目,否则不输出 dump

    DumpFolder

Dump输出路径

%LOCALAPPDATA%\CrashDumps

    DumpCount

Dump保存个数

10

    DumpType

Dump类型

0 - Custom dump
1 - Minidump (default)
2 - Full dump

    CustomDumpFlags

Dump Flags

前提:DumpType=0

{MiniDumpWithDataSegs

|MiniDumpWithUnloadedModules

|MiniDumpWithProcessThreadData}

参考:

收集User-Mode转储 - Win32 apps | Microsoft Docs

WER 设置 - Win32 apps | Microsoft Docs

闪退问题的应对措施

  • 应用日志

        查看闪退前的应用日志,日志中可能有一些蛛丝马迹,比如一些错误警告信息。通过日志也能够大概还原闪退前的使用操作,对分析与复现问题有很大帮助。

  • 性能监控

        应用闪退前的系统性能、应用性能对排查问题可能有一些帮助。建议测试前,配置Windows性能监控。参考:

Windows性能监控工具Perfmon的使用、性能指标分析

  • 事件日志

        在CrashRpt没有捕捉到异常时,Windows事件系统会记录到应用的这个错误,在一些情况下可以通过记录的信息来获取崩溃或问题位置。

使用Windows事件查看器调试崩溃

  • 闪退恢复

        通过另一个进程辅助,重新启动应用,并上报闪退信息。

闪退上报方案

  • Crashdump 收集

        首先,需要添加下面这个注册表项,这样就能生成 crash dump 了,大部分机器一开始是没有的

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\

  • 闪退监测

        需要辅助进程来监测,与主进程一起启动,通过共享内存协助,主进程在共享内存中写入进程id,如果正常退出,就清空写入的信息(写入0)。

辅助进程监测到管道断开,并且共享内存中的pid没有清空时,就判断出主进程Crash了。

        

        通过读取 Windows事件,进一步验证主进程Crash。如果 CrashRpt 抓住了应用异常,则没有相应的事件生成。这时候不需要上报闪退日志。

        系统生成 Windows事件和 dump文件需要一段时间,这时候会有等待(不超过 5秒+10秒)。

  • 日志上报

        闪退日志上报与崩溃日志上报使用统一的后台接口。区别在于:

  1. 闪退日志没有截图
  2. zip包中没有截图、crashrpt.xml
  • 应用重启

        释放共享内存,重启主进程

附:CrashRpt原理

        下面仅针对window平台的实现,说明一下异常捕捉(Catch)的原理,不包括上报方案。

CrashRpt: About Exceptions and Exception Handling

捕捉项目

系统API

原理说明

备注

全局异常

    结构化(SEH)异常

SetUnhandledExceptionFilter

    虚函数调用异常

_set_purecall_handler

_get_purecall_handler, _set_purecall_handler | Microsoft Docs

    内存分配异常

_set_new_mode

_set_new_handler

    非法参数异常

_set_invalid_parameter_handler

    非正常退出

signal:SIGABRT

    中断信号

signal:SIGINT

    终止信号

signal:SIGTERM

线程相关

    terminate调用

set_terminate

set_terminate (CRT) | Microsoft Docs

    unexpected调用

set_unexpected

set_unexpected (CRT) | Microsoft Docs

    浮点数异常

signal:SIGFPE

    非法指令

signal:SIGILL

    非法地址访问

signal:SIGSEGV文章来源地址https://www.toymoban.com/news/detail-453748.html

到了这里,关于Windows 闪退问题排查分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Visual Studio Code程序运行后外部终端界面闪退的问题

    场景: 背景:在vscode下运行C语言程序时,总会出现外部输出终端界面闪退的情况,在查看了许多资料后,终于解决了问题,写下这篇文章记录一下自己解决问题的过程。 代码运行后外部输出界面闪退: 在运行上述代码段后,按照提示输入键入一串成绩(以一个负数作为循环

    2024年02月16日
    浏览(67)
  • 标注工具Labelimg,正常运行显示,但是对图片点击Create RectBox画矩形框开始闪退

    File “C:ProgramDataanaconda3Libsite-packageslibscanvas.py”, line 530, in paintEvent p.drawLine(self.prev_point.x(), 0, self.prev_point.x(), self.pixmap.height()) TypeError: arguments did not match any overloaded call: drawLine(self, l: QLineF): argument 1 has unexpected type ‘float’ drawLine(self, line: QLine): argument 1 has unexpected type ‘

    2024年02月16日
    浏览(40)
  • GD32(STM32)因为中断问题,导致不能进行程序 正常运行

    项目中,之前定时器中断就用了个TIM2,但后来程序优化需要再加一个计数定时器TIM6,     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                      // 开启定时器时钟,即内部时钟CK_INT=72M     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);             // 自动重装载寄存器

    2024年02月07日
    浏览(35)
  • Kafka 消息不能正常消费问题排查

    事情的起因是用户在 app 上查不到订单了,而订单数据是从 mysql 的 order_search 表查询的,order_search 表的数据是从 oracle 的 order 表同步过来的,查不到说明同步有问题 首先重启,同步数据,问题解决,然后查找原因。首先看日志,有如下两种情况 有的容器消费消息的日志正常

    2024年01月18日
    浏览(49)
  • selenium 程序执行完之后,没有报错,Chrome浏览器闪退,他可能是正常的

    作为一个初学selenium,代码基础也不咋行的人,在安装好一切工具之后,跑了第一段打开浏览器访问www.baidu.com的代码,然后这个窗口闪了一下就没了??? 网上的几种解决方法(具体操作步骤可以去搜搜,网上很多): chrome的驱动版本 ,驱动版本与浏览器版本不一致,需要

    2023年04月27日
    浏览(76)
  • 使用Windbg分析从系统应用程序日志中找到的系统自动生成的dump文件去排查问题

    目录 1、尝试将Windbg附加到目标进程上进行动态调试,但Windbg并没有捕获到

    2024年02月14日
    浏览(39)
  • 解决Windows缺少msadodc.ocx无法运行程序问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个msadodc.ocx文件进行安装(前提是找到适合的版本),当我们执行某

    2024年02月11日
    浏览(58)
  • Python生成exe文件运行黑框闪退问题解决办法

    在进行python文件生成exe文件的过程中,生成的exe文件运行总是黑框闪退,找了蛮多博客解释的并不清晰,在B站学习了一下,将整个过程记录下来,仅供大家参考。 首先说明我写的程序是爬取链接,程序是可以运行没问题的。 下面进行生成exe文件的操作: 选择你编写程序的文

    2024年02月09日
    浏览(41)
  • 解决Windows缺少MSCOMCTL.OCX文件无法运行程序问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个MSCOMCTL.OCX文件进行安装(前提是找到适合的版本),当我们执行

    2024年02月11日
    浏览(88)
  • 微信小程序-开了调试Vconsole能正常运行,不开调试不能正常运行

    这个微信小程序太奇怪了,做了一点小改动要上线,在本地连接真机调试好好的,上到体验环境手机打开就不行了。 而且奇怪,体验版打开调试后又正常了,加载页面的时候报了一个错 \\\"(in promise) MiniProgramErrornInvalid attempt to spread non-iterable instance.nIn order to be iterable, non-arra

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包