软件常见崩溃的原因:

错误类型

具体表现

备注(案例)

声明错误

变量未声明

编译时错误

初始化错误

未初始化或初始化错误

运行不正确

访问错误

1、  数组索引访问越界

2、  指针对象访问越界

3、  访问空指针对象

4、  访问无效指针对象

5、  迭代器访问越界

6、dll与lib及头文件不一致

7、dll 导出接口定义为导入接口

WinDbg,Application verifier,Global flags等工具定位崩溃

内存泄漏

1、  内存未释放

2、  内存局部释放

3、   多线程读写成员变量

参数错误

本地代理、空指针、强制转换

堆栈溢出

调用堆栈溢出:

1、递归调用

2、循环调用

3、消息循环

4、大对象参数

5、大对象变量

参数、局部变量都在栈(Stack)上分配

转换错误

有符号类型和无符号类型转换

内存碎片

小内存块重复分配释放导致的内存碎片,最后出现内存不足

数据对齐,机器字整数倍分配

解决办法:

1.使用日志,这个比较常见就不做说明

2.使用windbg,具体参照windbg使用说明

3.使用Application verifier或者Global flags ,具体参照verifier使用说明

windbg与Application verifier,Global flags安装包地址:windbg_appVerifier_globalFlags.rar-C++文档类资源-CSDN下载

安装完之后这几个exe不在同一个目录。

windbg使用说明:

       windbg通常用于定位逻辑上的错误

1,发表软件时,设置生成调试信息(vs环境,项目属性-》链接器-》调试信息-》生成调试信息以及生成程序数据库文件(pdb文件))

2,  软件中添加生成dump文件的代码(可自行百度)。

3,打开windbg 添加pdb路径,加载dump文件,有源码的可添加源码路径。以上三个动作均在file菜单栏。

4,打开windbg view-》comand 输入:!analyze,分析崩溃原因,紧接着输入kv或者直接点击view->call stack,查看崩溃时的堆栈信息。

dll与lib 头文件不一致,dll export接口定义为import等引起的崩溃,具体表现为定位到的崩溃地址的源代码明显不会引起崩溃,此时只能人为排查。笔者曾将dll定义的导出接口设为了导入接口,调用dll时使用的动态调用(神奇的成功运行),然后软件不时的崩溃。最终历经四天终于一步步排查到这个问题。

Application verifier使用说明:

      verifier通常用于定位堆栈溢出,内存泄漏。当使用windbg定位到的崩溃位置明显不会崩溃时,此时要考虑堆破坏,内存越界,这两种会时崩溃发生延时崩溃发生偏移。考虑到这种情况windows的Page Heap应运而生,具体内容可自行搜索verifier则是微软提供工具。

1.打开Application verifier左侧右键添加要监控的exe

2.有侧选择basic 中的heap(也可以监控内存泄漏等问题),点击保存

3.打开log对话框,设置pdb文件路径,当软件产生异常时,打开日志定位到越界的具体位置

4.在win7运行当发生内存越界时,使用vs调试时软件会立即进入中断。win10时,发生越界时不会理解中断,会在释放内存时发生中断。

windows系统软件崩溃分析相关推荐

  1. 如何在一分钟内解决Windows系统崩溃问题

    投资万千种,关键在于实践和自身努力,几种证书挂靠挣钱方法,提供给大家,资料和考试科目.可以参见:http://hi.baidu.com/new/gaofeiservice http://gaofeis ...

  2. Windows主机日志分析办法与思路

    更多黑客技能 公众号:暗网黑客 看到有人问,windows主机日志怎么做分析,今天就分享一篇文章专门来说说windows主机日志分析.以下所有内容皆属于个人以往工作经验总结出来的,不是什么权威的行业标 ...

  3. 暴雪团队使用VS进行Linux平台崩溃分析

    蝎子 暴雪正在使用Visual Studio 2019在WSL上对Linux平台上发生的崩溃进行分析.本文来自暴雪高级软件工程师Bill Randolph,目前他负责暗黑破坏神4的开发工作.感谢Bil ...

  4. 记一次 .NET 某自动化采集软件 崩溃分析

    一:背景 1.讲故事 前段时间有位朋友找到我,说他的程序在客户的机器上跑着跑着会出现偶发卡死,然后就崩掉了,但在本地怎么也没复现,dump也抓到了,让我帮忙看下到底怎么回事,其实崩溃类的dump也有简 ...

  5. 关于Windows程序崩溃(Crash)以及生成dump文件的探究

    文章目录 关于Windows程序崩溃(Crash)以及生成dump文件的探究 什么是崩溃(Crash),崩溃(Crash)的现象 崩溃(Crash)的原因是什么 如何消除崩溃时出现的异常信息对话框 如 ...

  6. Windows平台崩溃转储系统crashrpt的使用

    概述 CrashRpt 是一个免费的.轻量级的开源错误报告库开源库,旨在拦截C++程序中的异常,收集有关崩溃的技术信息并通过互联网向软件供应商发送错误报告,用于在 Microsoft Visual S ...

  7. Windows系统内存分析工具的介绍

    Windows系统内存分析工具的介绍(进程管理器,资源管理器,性能监视器, VMMap, RamMap,PoolMon) 微软官方提供多种工具来分析Windows 的内存使用情况,除了系统自带的任务管 ...

  8. windows 内核情景分析

    原文很长:先转部分过来,有时间看一下: 一 windows 内核情景分析---说明 说明 本文结合<Windows内核情景分析>(毛德操著).<软件调试>(张银奎著).< ...

  9. Windows内核系统调用分析

    系统调用 进程 --> 调用OS API:OS进程管理 --> 调配进程. 仅从用户进程角度,OS就像是一个被动响应的运行时库.Windows提供了一个系统调用界面作为外层,即Win32A ...

最新文章

  1. Linux 中FTP服务的应用(安装配置)
  2. android:layout_gravity和android:gravity属性的区别
  3. Java FAQ(6)
  4. python编程爱心-使用Python画出小人发射爱心的代码
  5. 《商务旅行》解题报告
  6. LINQ to XML .Net 3.5 中的新XML对象
  7. 通过rpm安装postgresql-9.6无法远程连接的问题
  8. 使用Maven程序集创建漏洞评估工件
  9. 广州市科目三电子路考--大观路通过经验
  10. 哈夫曼算法(huffman algorithm C)
  11. 利用 AFN 上传相册或拍照图片
  12. C语言蓝桥杯刷题:等差素数列
  13. 我爱淘冲刺阶段站立会议每天任务3
  14. 【java网络】常用网络模型BIO
  15. android 标签开源控件,Android开源控件ViewPager Indicator的使用方法
  16. android 断点下载的实现,Android实现断点下载的方法
  17. Linux快捷键大全(参考)
  18. 永不言弃,希望就在前方
  19. ng Baidu Baidu Baidu ang
  20. CentOS7 中 Docker-ce 安装配置 MyCat-Web 监控 MyCat状态

热门文章

  1. EXCEL中如何将日期格式转换为文本格式
  2. 电压源电流源电路符号及2B法
  3. iOS版本最新分布概况
  4. 课程设计 - 单词检查
  5. 基于MATLAB的数字证件号识别
  6. Linux加密解密 及使用openssl工具实现CA
  7. 苹果白屏一直显示苹果_苹果6白屏如何解决,iPhone6白苹果开不了机怎么办
  8. Catlike Coding Unity教程系列 中文翻译 Basics篇(一)Game Objects and Scripts
  9. 仅限中国:AMD推出Radeon RX 560 XT
  10. 懒汉延迟加载设计模式反射注解