使用WinDBG调试查看C#内存转储文件
有时候我们想查看一个正在运行的程序内存中的数据,可以在任务管理器将内存状态保存为转储文件,并使用WinDBG验证,这里我们来试试:
0.安装WinDBG

1.首先写个代码用来测试
一个class
public class MyClass
{
public int AintValue = 123;
public static int BintValue = 456;
public string AstringValue = "AAA";
public static string BstringValue = "BBB";
}
在main中引用
Console.WriteLine($"ret={d1(1)}");
MyClass MC = new MyClass();
MC.AstringValue = "SuperAAAA";
Console.ReadKey(true);//程序会停在这,这时候保存文件
Console.Write(MC.AstringValue);
2.编译运行以后,到任务管理器保存内存转储文件

3.用WinDBG打开转储文件
点这里:

这里,然后选文件:

这里需要注意的是:
32位的WinDBG用来调试32位的程序dump文件,
64位的WInDBG用来调试64位的程序dump文件,
如果你跟我一样用的是UWP版的WinDBG,那只能调试64位的(一定有办法能调32位的,但我不知道,如果你知道,请回复,感谢~)
4:在内存中搜索我们要查看的对象类型

我们可以看到中间有个命令输入框:

首先输入两个命令,加载两个.net调试相关文件:
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
notice:中间有个目录是Framework64,如果是调试32位程序,改为Framework

加载成功.
在上面的C#代码中,我们声明了一个类 MyClass ,并实例化了它,现在我们要找到它,在windbg里,搜索类有两种方式:
1:根据类名 (有可能重复)
2:根据MT(Methot Table,唯一)
刚开始是不知道MT的,所以根据类名搜索:
!dumpheap -type MyClass
notice:"!dumpheap -type"这部分不验证大小写,后面类名会验证大小写

返回的内容,第一块是类的实例列表,第二块是对象列表(有时候名字很像的对象也会在这里)
可以看到我们的对象只有一个,第一列是MT,如果你搜索出了多个,可以根据MT搜索:
!DumpHeap -mt 00007ff9fc0a7488
5:查看对象信息
从实例列表中可以看到这个类只有1个实例,数据格式是:
内存地址 MT 占用内存长度
我们可以从内存地址,查看这个实例的详细信息:
!DumpObj /d 000002331f11bed0
notice:DumpObj 可以简写为do

可以看到下面列出了对象的所有属性.包括静态的,动态的.
值类型的属性直接显示了值
引用类型的属性给出了引用地址
对于string类型,我们还要再进一步:
!DumpObj 000002331f112f18

就可以看到字符串值了,如果是byte[]数据,可以直接用 "dd 内存起点 内存终点" 进行查看,如果想解析成字符串可以用du命令(u表示按unicode解析)
dd 000002331f112f18+c 000002331f112f18+c+53
du 000002331f112f18+c 000002331f112f18+c+8
字符串数据前12个字节是字符串的属性,所以要过掉

使用WinDBG调试查看C#内存转储文件的更多相关文章
- 内存转储文件调试系统崩溃bug
百度百科:内存转储文件 内存转储是用于系统崩溃时,将内存中的数据转储保存在转储文件中,供给有关人员进行排错分析用途.而它所保存生成的文件就叫做内存转储文件. 内存转储文件也被称作虚拟内存,它是用硬盘里 ...
- 如何删除Windows 10中的内存转储文件
内存转储文件是由Windows产生的.以下情况下可能产生内存转储文件: 计算机崩溃蓝屏 内存错误 硬件问题 内存转储文件包含计算机系统崩溃时的详细的参数副本.用于帮助识别导致系统崩溃的原因.Windo ...
- 内存转储文件 Memory.dmp
https://baike.sogou.com/v63435711.htm?fromTitle=内存转存文件 内存转储是用于系统崩溃时,将内存中的数据转储保存在转储文件中,供给有关人员进行排错分析用途 ...
- linux 查看cpu 内存 硬盘 文件夹大小
文件夹大小 显示cpu使用率 top 1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | w ...
- WinDbg调试.NET程序入门
俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinDbg工具远程帮我分析了一个 dum ...
- WinDbg调试.NET
WinDbg调试.NET程序入门 俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinD ...
- 如何使用Microsoft的驱动程序验证程序解释无法分析的崩溃转储文件
这篇文章解释了如何使用驱动程序验证工具来分析崩溃转储文件. 使用Microsoft驱动程序验证工具 如果您曾经使用Windows的调试工具来分析崩溃转储,那么毫无疑问,您已经使用WinDbg打开了一个 ...
- 在x64计算机上捕获32位进程的内存转储
这是一个我经常遇到的问题,我们经常会遇到这样的情况:我们必须重新捕获内存转储,因为内存转储是以“错误”的方式捕获的.简而言之:如果在64位计算机上执行32位进程,则需要使用允许创建32位转储的工具捕获 ...
- 获取JVM转储文件的Java工具类
在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法.这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获 ...
随机推荐
- 201521123029《Java程序设计》第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123060《Java程序设计》第2周学习总结
1. 本周学习总结 a.进一步熟悉了Eclipse的使用和java程序的编写: b.学习了java数据的基本类型:整数类型,浮点类型等: c.学习了算数运算符,赋值运算符,位运算符,关系运算符,逻辑运 ...
- 201521123076《Java程序设计》第1周学习总结
一. 本章学习总结 1.了解了JDK,JVM,JRE的相关内容 JVM(Java Virtual Machine): Java虚拟机,*.java原始码,经过编译程序翻译为.class位码.JVM正是 ...
- 201521123064 《Java程序设计》第1周学习总结
1. 本章学习总结 1.了解Java与C/C++的区别,Java语言所写程序较为繁琐,C/C++较为简洁. 2.学会使用cmd进行程序的编译及运行. 3.学会利用JDK辅助Java编程. 4.使用ec ...
- evak购物车-课程设计(201521123034陈凯欣)
1.团队课程设计博客链接 https://i.cnblogs.com/EditPosts.aspx?postid=7047127 2.个人负责模块或任务说明 1.Java 编写商品类Goods,商品属 ...
- 控制结构(3) 状态机(state machine)
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...
- Spring REST API + OAuth2 + AngularJS
http://www.baeldung.com/rest-api-spring-oauth2-angularjs 作者:Eugen Paraschiv 译者:http://oopsguy.com 1. ...
- 04面向对象编程-02-原型继承 和 ES6的class继承
1.原型继承 在上一篇中,我们提到,JS中原型继承的本质,实际上就是 "将构造函数的原型对象,指向由另一个构造函数创建的实例". 这里,我们就原型继承的概念,再进行详细的理解.首先 ...
- 在 Ubuntu 上安装 MongoDB
在 Ubuntu 上安装 MongoDB 运行下列命令,导入 MongoDB 公开 GPG 键: sudo apt-key adv --keyserver hkp://keyserver.ubuntu ...
- JAVA设计模式总结之六大设计原则
从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇 ...