Dump分析实例

本实例基于VS开发,利用Windbg程通过序崩溃生成的dump文件进行简单的分析,借此了解dump分析的主要流程。

  • 什么是dump文件?

即内存存储文件,一个进程或系统在某个给定时间的快照。也是内存镜像,保存了程序的执行状态。

通俗地理解,dump文件是程序发生异常甚至崩溃时,保存当时程序运行状态的文件,主要用来分析程序崩溃原因或蓝屏原因。

  • 如何生成dump文件?

方法一:使用任务管理器
前提:程序运行崩溃后,没有自动退出的情况下。
任务管理器找到相应进程,右键选择“创建转储文件”,会在默认目录下生成该程序的dump文件。
在这里插入图片描述
方法二:使用Windbg抓取
前提:程序运行崩溃后,没有自动退出的情况下。
运行程序exe,在“Attach to a Process…”中选择对应程序
在这里插入图片描述
输入命令: .dump [/ma/mdi] [存放路径]
在这里插入图片描述
- 如何用Windbg打开dump文件?

  1. “Symbol file path ”设置pdb文件目录

     pdb文件:保存程序的基本数据(变量名、参数等以及其对应行数),在vs链接时形成。
    
  2. “Source file path”设置对应源代码目录(sln所在的目录)

  3. “open crash Dump”打开调试的dump文件

注意:若报错如下:
在这里插入图片描述
dump文件需要加载wow64exts才能访问32位数;执行命令:.load wow64exts
将32位dump转为64位;执行命令:!sw

  • 这个例子使用简单的空指针崩溃test。

一般先执行命令:!analyze -v
在这里插入图片描述

根据STACK_TEXT(显示崩溃时的调用堆栈信息)分析:最终崩溃位置:在wmain函数(主函数),
根据FAULTING_SOURCE_CODE分析:可以看出是调用了空指针而导致的崩溃。

不过从现实的例子来说,只看FAULTING_SOURCE_CODE是不能准确定位的,需要结合STACK_TEXT显示的各函数相对位置,结合代码分析。

微信扫码订阅
UP更新不错过~
关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
<h3>回答1:</h3><br/>Java VisualVM是一种用于分析Java应用程序的工具,可以使用它来分析dump文件。以下是使用Java VisualVM分析dump文件的步骤: 1. 打开Java VisualVM并选择“File”菜单中的“Load”选项。 2. 选择要分析dump文件并加载它。 3. 在左侧的“Applications”窗口中选择要分析的Java应用程序。 4. 在右侧的“Monitor”窗口中选择要分析的线程或进程,并查看其性能指标和堆栈跟踪信息。 5. 使用Java VisualVM提供的其他工具和插件来进一步分析和优化Java应用程序的性能。 总之,Java VisualVM是一种非常有用的工具,可以帮助开发人员诊断和解决Java应用程序的性能问题。 <h3>回答2:</h3><br/>Java VisualVM是一个Java虚拟机监视和分析工具。它提供了实时的应用程序性能监控,以及基于某些特定平台的内存和线程分析。使用Java VisualVM可以分析非常详细的诊断信息,它可以非常轻松地获取一个Java应用程序运行时的进程快照,即dump文件。在获取到dump文件后,我们可以通过Java VisualVM对dump文件进行分析,以更深入地了解应用程序的性能状况,从而提高程序的性能。下面我们来具体说明如何使用Java VisualVM分析dump文件。 在使用Java VisualVM分析dump文件之前,首先需要下载和安装Java VisualVM。Java VisualVM提供了以下两种方式来分析dump文件: 1.打开本地应用程序 打开Java VisualVM后,从菜单栏中点击File -> Load 即可打开本地应用程序,并可以在Applications选项卡中查看正在运行的Java进程。选取需要分析的进程,然后点击Snapshot按钮,即可生成dump文件。 2.分析远程应用程序 Java VisualVM还提供了通过JMX连接到远程应用程序获取dump文件的方式。选择File -> Add JMX Connection选项,并输入连接的IP地址和端口号。成功连接后,点击Applications选项卡,选择远程应用程序,然后点击Snapshot按钮即可生成dump文件。 在得到dump文件之后,我们可以通过Java VisualVM来进行性能分析。首先我们需要打开dump文件,选择File -> Load Snapshot,选择目标dump文件。在界面的左侧,我们可以看到以下五个选项卡: 1. Overview 用于查看堆内存和线程状况的概览。 2. Monitor 用于实时监控Java应用程序的性能和资源使用情况,如CPU、内存、线程等。 3. Heap Dump 用于查看内存快照中的详细信息,帮助找出内存泄漏和对象占用情况。 4. Threads 用于查看各个线程的状态和历史记录,并对线程进行诊断和采样。 5. Samples 用于对应用程序的性能瓶颈进行采样和分析,查找性能瓶颈和优化应用程序。 通过以上选项卡,我们可以对应用程序进行更加深入的性能分析,找出应用程序的性能瓶颈,帮助我们更好地优化应用程序的性能。 <h3>回答3:</h3><br/>Java VisualVM 是 Java 官方提供的一个性能分析工具,它可以通过连接远程或本地的 JVM 进程,收集各种性能相关的数据,包括堆内存、CPU、线程、GC 等。同时,Java VisualVM 还能够生成 Heap Dump 文件,用于分析内存泄露等问题。本文主要介绍如何使用 Java VisualVM 分析 Heap Dump 文件。 一、导出 Heap Dump 文件 在 Java VisualVM 中,我们可以在“Applications” 中找到正在运行的 Java 应用程序,右键点击应用程序进程并选择“Heap Dump”即可生成 Heap Dump 文件,存放在本地文件系统中。该文件包含了 JVM 进程的整个内存快照,用于分析内存泄露、对象引用等问题。 二、分析 Heap Dump 文件 1. 打开 Heap Dump 文件 将 Heap Dump 文件导入到 Java VisualVM 中,可以通过“File”-”Load”-”Heap Dump”来打开。 2. 了解 Heap Dump 概要信息 通过查看 Heap Dump 的概要信息,可以了解到该应用程序的总内存使用量、对象个数、堆内存各区域的使用情况等。 3. 查看对象实例 在“Classes”标签页中,我们可以查看 Heap Dump 文件中所有的类,其中包含每个对象的实例数、占用内存大小等信息。可以通过该信息找到占用内存较大的对象,进一步分析其使用情况。 4. 分析对象引用 通过“References”标签页,我们可以查看各个对象之间的引用关系。可以通过该信息找到内存泄露的对象引用,找到引用该对象的对象,或使用MAT等工具分析该对象的引用链路,定位到引用根源。 5. 分析堆内存分布 通过“Heap Dump”标签页,我们可以查看堆内存分布情况。可以查看到堆内存各区域的内存大小及使用情况,从而了解内存的占用情况。 三、结论 本文介绍了如何使用 Java VisualVM 分析 Heap Dump 文件,通过了解对象实例、对象引用、堆内存分布等信息,找到内存泄露的对象,并定位到引用根源,进一步优化应用程序,提高其性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiDu Shinichi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值