首页 / C# / c# – 尝试使用CLR MD查找对象根
c# – 尝试使用CLR MD查找对象根
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 尝试使用CLR MD查找对象根,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1959字,纯文字阅读大概需要3分钟。
内容图文
![c# – 尝试使用CLR MD查找对象根](/upload/InfoBanner/zyjiaocheng/795/b2d01bb7106046368b82965d75eb2915.jpg)
这是我的课
namespace MyNamespace
{
public class MyClass
{
private byte[] imageBytes = null;
public MyClass() { }
public void LoadImage(string filePath)
{
Image img = Image.FromFile(filePath);
using (MemoryStream mStream = new MemoryStream())
{
img.Save(mStream, img.RawFormat);
imageBytes = mStream.ToArray();
}
}
public void RemoveImage()
{
imageBytes = null;
}
}
}
而这就是它的用法
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc.LoadImage(@"C:\Images\myImage.jpg");
Console.WriteLine("take process dump now...");
Console.Read();
mc.RemoveImage();
}
我运行程序并获取进程快照.毫不奇怪,这是我发现的关于MyClass的参考资料.
0:000> !DumpHeap -type MyClass
Address MT Size
0000000002b92e08 000007fe73423a20 24
Statistics:
MT Count TotalSize Class Name
000007fe73423a20 1 24 MyNamespace.MyClass
Total 1 objects
0:000> !GCRoot 0000000002b92e08
Thread 3b3c:
00000000004eef90 000007fe7354011f MyTestApp.Program.Main(System.String[]) [c:\Projects\MyTestApp\Program.cs @ 17]
caller.rsp-30: 00000000004eefb0
-> 0000000002b92e08 MyNamespace.MyClass
Found 1 unique roots (run '!GCRoot -all' to see all roots).
现在我想看看是否可以使用CLR MD为同一个转储文件中的MyClass实例获取相同的根.为此,我使用GCRoot样本.这个应用程序的一个输入是ulong obj.我不确定如何为MyClass实例获取这个,所以我所做的是在GCRoot示例的Main方法中,我添加了以下代码.
foreach (ulong obj2 in heap.EnumerateObjects())
{
ClrType type2 = heap.GetObjectType(obj2);
if (type2.Name.StartsWith("MyNamespace.MyClass") )
obj = obj2;
}
这样我看到obj获得了一个有效值,但问题是以下代码行没有找到任何节点,因为它总是返回NULL.
Node path = FindPathToTarget(heap, root);
因此,我不确定如何从此转储文件获取MyClass实例的根.任何建议将受到高度赞赏.
解决方法:
ClrMD绝对可以用来创建与GCRoot相同的输出,GCRoot样本就像windbg!GCRoot命令一样没有详细说明.
在您的情况下,对象“MyClass”是一个根(来自主线程的局部变量),并且示例不返回任何内容.
您可以检查Heap.EnumerateRoots()返回的ClrRoot,您将找到类型为“MyClass”的对象.
内容总结
以上是互联网集市为您收集整理的c# – 尝试使用CLR MD查找对象根全部内容,希望文章能够帮你解决c# – 尝试使用CLR MD查找对象根所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。