当前位置: 首页 > news >正文

【无标题】windbg 分析dump文件

windbg 分析dump文件

windbg 分析dump文件 - 简书 (jianshu.com)

Windows下的程序如果设计有问题,如存在越界、访问空指针等,会出现崩溃的现象.
如下:

程序崩溃截图

崩溃的时候就需要分析原因,方便分析和后续优化程序.
此时一种方法就是用::MiniDumpWriteDump
生成dump文件(.dmp), 记录崩溃是的系统信息和堆栈信息等.
生成dump文件后,研发人员就可以用windbg工具进行分析.

  • 打开dump文件

Open Crash Dump

选择dump文件

  • 指定Symbol File Path

    指定**Symbol File Path**


    即指定符号文件(比如.pdb)所在的路径。
    符号文件包含了相关二进制文件的调试信息,以.pdb戒.dbg为扩展名。
    WinDbg使用符号文件来确定调用栈,堆及其他重要信息。

A native C++ PDB file contains quite a bit of information:

  1. Public, private, and static function addresses
  2. Global variable names and addresses
  3. Parameter and local variable names and offsets where to find them on the stack
  4. Type data consisting of class, structure, and data definitions
  5. Frame Pointer Omission (FPO) data, which is the key to native stack walking on x86
  6. Source file names and their lines

.pdb文件中包含了

  1. 共有、私有、静态函数的地址
  2. 全局变量的名称和地址
  3. 参数和局部变量的名称和在栈中的偏移量
  4. 类和结构体等定义
  5. Frame Pointer Omission (FPO) data
  6. 源文件名称及其行号
  • 分析崩溃的位置
    运行命令:

!analyze -v

!analyze -v

运行结果中最重要的就是STACK_TEXT, 用于显示崩溃时的调用堆栈信息:

STACK_TEXT

STACK_TEXT下的第一行一般最重要,可指示最终崩溃的位置:

崩溃位置


可以看出crashrpt_dempdlg.cpp文件的165行(OnBnClickedButtonCrash函数中)发生了崩溃问题.

FAULTING_SOURCE_CODE段可以查看崩溃位置的源码.

有的还可打印出源码的崩溃位置

可以看出165行代码的地方因为访问已经释放的指针而出现崩溃.

References:

https://www.wintellect.com/pdb-files-what-every-developer-must-know/



作者:FlyingPenguin
链接:https://www.jianshu.com/p/ee979eaadf34
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • Dump文件有三种:完整内存转储,内核内存转储,小内存转储。System Properties中的高级选项中可以看到这些设置。
  • Analysing crash dump in windbg
  • 【无标题】使用VS调试DUMP文件
  • 使用VS调试Dump文件
  • 【无标题】dump解析入门-用VS解析dump文件进行排障
  • Crash Dump调试:Symbol Server/Source Server、PDB原理分析
  • [笔记]Ray Tracing with Cones
  • bundletool 工具使用
  • 123456789
  • Visual Studio调试器指南---自动启动调试器
  • 在启动时无法再使用vsjitdebugger来调试进程
  • 游戏引擎随笔 0x34:UE5 Lumen 源码解析(六)Importance Sampling 篇
  • 剖析虚幻渲染体系(06)- UE5特辑Part 2(Lumen和其它)
  • Oracle查询字段 类型 长度 是否空 注释
  • oracle数据恢复
  • @jsonView过滤属性
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular6错误 Service: No provider for Renderer2
  • Apache的基本使用
  • chrome扩展demo1-小时钟
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Javascript编码规范
  • JavaScript的使用你知道几种?(上)
  • javascript数组去重/查找/插入/删除
  • Shell编程
  • Spring-boot 启动时碰到的错误
  • SQLServer之索引简介
  • underscore源码剖析之整体架构
  • 闭包,sync使用细节
  • 大数据与云计算学习:数据分析(二)
  • 翻译--Thinking in React
  • 检测对象或数组
  • 前端设计模式
  • 一些关于Rust在2019年的思考
  • 鱼骨图 - 如何绘制?
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • #pragma 指令
  • #stm32驱动外设模块总结w5500模块
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $.each()与$(selector).each()
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)构建dubbo分布式平台-平台功能导图
  • (二开)Flink 修改源码拓展 SQL 语法
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)图像的%2线性拉伸
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .describe() python_Python-Win32com-Excel