- 博客(15)
- 收藏
- 关注
原创 使用WinDbg —— .NET篇 (十三)
8.3 C#创建Mini dump8.3.1 概述DbgHelp库Microsoft提供了DbgHelp库,它包含了一系列关于辅助调试PE格式的API。其相关的dll是DbgHelp.dll,这个文件包含在了操作系统里面,但是早期的操作系统里面(我映像中是在Win7版本之前)这个Dll文件是不可用的。所以如果你的客户还有一些Win XP用户或早期版本的Windows OS用户的
2016-08-13 11:32:06
1238
原创 使用WinDbg —— .NET篇 (十二)
接上篇:分析总结一下用到的方法:1. 分析栈回溯信息:通过“!dumpstack”可以打印出当前线程的所有托管和非托管的栈帧信息,输出信息表格里面第一列是ChildEBP,表示子栈帧的EBP地址,也就是子方法的栈底地址;RetAddr表示当前栈帧的的返回地址,最后一列Caller,Callee就是调用者和被调用者,例如这一列:0115f218 015
2016-07-23 17:24:08
615
原创 使用WinDbg —— .NET篇 (十一)
2. 如何找到参数值还是先看代码:using System; namespace TestStackMethod{ classProgram { staticvoid M3() { Console.Write("Press any key to con
2016-07-23 15:09:21
876
原创 使用WinDbg —— .NET篇 (十)
八、诊断实例在这一节主要讲述如何在具体的场景中运用Windbg,主要讲述一些我平常工作中用的比较多的使用场景,比如怎么查看某个线程具体执行到哪一行代码,调用方法时怎么传值,怎么分析查找线程栈中的变量,堆中的内存对象等。1. 分析线程栈回溯(call stack)中某个方法(托管方法)执行到了哪一步。通常在工作中会碰到这么一个场景,需要分析一个Freezing的dump是
2016-07-23 14:43:09
761
原创 使用WinDbg —— .NET篇 (九)
7.3 Monitor (lock) 与ReaderWriterLockSlim另外在.NET中,常用的锁通常是Monitor(也就是关键词lock)和ReaderWriterLockSlim,其中Monitor的使用更加广泛,在本节也主要是介绍Monitor。在讲解Monitor之前,需要了解一下C#中甚至CLR中引用类型的内存结构,举个例子:classLocke
2016-05-28 20:22:57
1467
原创 使用WinDbg —— .NET篇 (八)
7.2 Mutex, Semaphore 与EventWaitHandle首先如果要避免非原子性的操作的读脏问题,就不免涉及到线程间的通信问题,这里所说的通信是指:一个线程在运行到某个地方通知其他的线程可以运行或者通知其他线程需要等待的通信,从而避免读脏问题,在Windows主要使用EventWaitHandle(奇迹般的找不到这个关键字的中文翻译)、互斥体(Mutex)、信号量(Sema
2016-05-28 20:18:21
882
原创 使用WinDbg —— .NET篇 (七)
七、线程相关7.1概要多线程导致的问题也是常见的问题,通常都是因为并发或同步导致的,为了更好的用户体验和对CPU的充分利用,并发和同步是不可或缺的编程模式。因为并发和同步难免会涉及到多线程同时访问同一个资源,或同一段内存,所以问题就从这一初衷开始衍生,常见的问题有:1.读脏:读脏的意思是线程访问某个内存区域里面或者某个资源的值在读的时候是一个值,在开始使用的时候又是另外一个值,
2016-05-28 20:15:19
600
原创 使用WinDbg —— .NET篇 (六)
6.4 根根(root)的概念原本打算放在前面讲代的概念的时候提一下,但是根的概念也涉及到终结队列和GC句柄表,所以不适合放在代里面讲;但是讲代的时候难免会涉及到根的相关概念,所以也不适合放在后面,这是个先有鸡还是先有蛋的问题,让人纠结,所以折中一下,在前面个讲代的时候简单的提了一下根的概念,主要把根的概念放在后面讲。根其实就是指根对象,前面讲的概念里面也大多涉及到对象可不可达的问题。如
2015-11-07 14:49:24
1696
原创 使用WinDbg —— .NET篇 (五)
6.2 终结方法C++语言里面有个概念叫做析构函数,析构函数的语法和C#的终结方法一样,都是通过“~” + 类名作为函数名。也有人把C#的终结方法叫做析构函数,然而我还是比较喜欢终结方法这种叫法,一者因为C#中的终结方法的执行机制跟C++的析构函数是完全不一样的,被称作析构函数容易混淆;二者因为终结方法编译后的模块中,生成的IL中能看到生成的方法名就叫做Finalize。之前我们看到
2015-10-25 11:05:58
1414
原创 使用WinDbg —— .NET篇 (四)
六、内存相关内存管理一直都是很大的话题,内存问题也是程序中最常见的问题。一般常见的内存问题有:悬挂指针(Dangling Pointer)、重复释放(Double Free)、内存泄露(Memory Leak)。悬挂指针是指某个变量指针指向的地址内存已经被释放掉了,这个指针地址已经无效,这种错误在托管代码中已经不存在了,所以这个不讲。跟悬挂指针关系比较密切的错误是Heap Corrup
2015-09-27 17:31:10
1921
原创 使用WinDbg —— .NET篇 (三)
利用Windbg观察对象,包括引用类型对象,栈中和堆中的值类型实例,数组,全局静态字段和实例字段等。
2015-06-02 10:28:06
1245
转载 与非托管代码的互操作性
本文来自于《CLR via C#》中文版第四版1.9,作者Jeffrey Richter 译者:周靖。LZ记录下来完全是为了以后的方便查文档。Note:1. TlbImp是Type Library Importer的简称。2. LZ常用的P/Invoke帮助网站:http://www.pinvoke.net/ 原文:.NET Framework提供了
2015-03-22 19:11:04
577
原创 使用WinDbg —— .NET篇 (二)
WinDBG作为Microsoft的御用工具,其强大之处使我这等小辈难以望其项背,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、dump文件调试、远程调试等。其灵活性和可扩展性能极大满足调试要求。所以对于WinDBG,读者非常有必要花费一些业余时间来学习研究。
2015-03-14 16:09:52
2643
原创 使用WinDbg —— .NET篇 (一)
一、前言WinDBG作为Microsoft的御用工具,其强大之处使我这等小辈难以望其项背,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、dump文件调试、远程调试等。其灵活性和可扩展性能极大满足调试要求。所以对于WinDBG,读者非常有必要花费一些业余时间来学习研究。本文主要是通过调试C#编写的NET程序来对WinDBG作一个片面的介绍,由于笔者真正开始使用Wind
2015-02-27 23:25:38
5897
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人