windows系统软件崩溃分析
软件常见崩溃的原因:
错误类型 |
具体表现 |
备注(案例) |
声明错误 |
变量未声明 |
编译时错误 |
初始化错误 |
未初始化或初始化错误 |
运行不正确 |
访问错误 |
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系统软件崩溃分析相关推荐
- 如何在一分钟内解决Windows系统崩溃问题
投资万千种,关键在于实践和自身努力,几种证书挂靠挣钱方法,提供给大家,资料和考试科目.可以参见:http://hi.baidu.com/new/gaofeiservice http://gaofeis ...
- Windows主机日志分析办法与思路
更多黑客技能 公众号:暗网黑客 看到有人问,windows主机日志怎么做分析,今天就分享一篇文章专门来说说windows主机日志分析.以下所有内容皆属于个人以往工作经验总结出来的,不是什么权威的行业标 ...
- 暴雪团队使用VS进行Linux平台崩溃分析
蝎子 暴雪正在使用Visual Studio 2019在WSL上对Linux平台上发生的崩溃进行分析.本文来自暴雪高级软件工程师Bill Randolph,目前他负责暗黑破坏神4的开发工作.感谢Bil ...
- 记一次 .NET 某自动化采集软件 崩溃分析
一:背景 1.讲故事 前段时间有位朋友找到我,说他的程序在客户的机器上跑着跑着会出现偶发卡死,然后就崩掉了,但在本地怎么也没复现,dump也抓到了,让我帮忙看下到底怎么回事,其实崩溃类的dump也有简 ...
- 关于Windows程序崩溃(Crash)以及生成dump文件的探究
文章目录 关于Windows程序崩溃(Crash)以及生成dump文件的探究 什么是崩溃(Crash),崩溃(Crash)的现象 崩溃(Crash)的原因是什么 如何消除崩溃时出现的异常信息对话框 如 ...
- Windows平台崩溃转储系统crashrpt的使用
概述 CrashRpt 是一个免费的.轻量级的开源错误报告库开源库,旨在拦截C++程序中的异常,收集有关崩溃的技术信息并通过互联网向软件供应商发送错误报告,用于在 Microsoft Visual S ...
- Windows系统内存分析工具的介绍
Windows系统内存分析工具的介绍(进程管理器,资源管理器,性能监视器, VMMap, RamMap,PoolMon) 微软官方提供多种工具来分析Windows 的内存使用情况,除了系统自带的任务管 ...
- windows 内核情景分析
原文很长:先转部分过来,有时间看一下: 一 windows 内核情景分析---说明 说明 本文结合<Windows内核情景分析>(毛德操著).<软件调试>(张银奎著).< ...
- Windows内核系统调用分析
系统调用 进程 --> 调用OS API:OS进程管理 --> 调配进程. 仅从用户进程角度,OS就像是一个被动响应的运行时库.Windows提供了一个系统调用界面作为外层,即Win32A ...
最新文章
- Linux 中FTP服务的应用(安装配置)
- android:layout_gravity和android:gravity属性的区别
- Java FAQ(6)
- python编程爱心-使用Python画出小人发射爱心的代码
- 《商务旅行》解题报告
- LINQ to XML .Net 3.5 中的新XML对象
- 通过rpm安装postgresql-9.6无法远程连接的问题
- 使用Maven程序集创建漏洞评估工件
- 广州市科目三电子路考--大观路通过经验
- 哈夫曼算法(huffman algorithm C)
- 利用 AFN 上传相册或拍照图片
- C语言蓝桥杯刷题:等差素数列
- 我爱淘冲刺阶段站立会议每天任务3
- 【java网络】常用网络模型BIO
- android 标签开源控件,Android开源控件ViewPager Indicator的使用方法
- android 断点下载的实现,Android实现断点下载的方法
- Linux快捷键大全(参考)
- 永不言弃,希望就在前方
- ng Baidu Baidu Baidu ang
- CentOS7 中 Docker-ce 安装配置 MyCat-Web 监控 MyCat状态