摘要:UMDH(User-Mode Dump Heap)是一个用于调试和分析内存泄漏的工具。它是微软提供的一种 Windows 调试工具,可帮助开发人员找出应用程序中的内存泄漏问题。 UMDH 的工作原理是基于堆分配的内存跟踪。它通过监测应用程序的堆分配和释放操作,生成一系列堆快照(Heap Snapsh
阅读全文
摘要:.Dbg Dbg 文件是一种专门用于调试器的文件格式,它存储了程序的调试信息。以下是关于 Dbg 文件格式的一些详细信息: 调试信息类型:Dbg 文件包含了与程序相关的调试信息,如符号表、断点信息、源代码行号信息、变量和表达式的值等。 文件结构:Dbg 文件的具体结构会根据使用的调试器和操作系统而有
阅读全文
摘要:大家好。这里有一个关于!gchandleleaks和windbg中的托管断点。WINDOWH.EXE(代码如下)-来自一个示例应用程序,该应用程序演示了如何调用EnumWindows。我修改了它以循环方式运行,但是每次都忘记释放一个gc句柄。随着时间的推移,这将导致gc堆增长,最终耗尽内存。对于本文
阅读全文
摘要:简介 STATUS_DEVICE_HARDWARE_ERROR表示硬件设备发生错误。值为0xC0000483,定义如下: //// MessageId: STATUS_DEVICE_HARDWARE_ERROR//// MessageText://// The request failed due
阅读全文
摘要:在调试客户崩溃dmp文件时,已经恢复了异常栈,需要查看当前的对象,但是this指针如下 很明显,这个值不对,ecx指针的值被修改做它用了。没关系,可以查看函数汇编,看看this指针保存在哪儿了,一般是栈上,找到这个地址就可以了,于是 由上图可知,ecx显示给了esi,esi又放到栈上esp+14h处
阅读全文
摘要:简介 STATUS_STACK_OVERFLOW 无法为堆栈创建新的保护页。通常情况下就是线程栈爆掉了。一般是发生了无穷递归或栈里用过大的内存导致。其值0xC00000FD。定义如下: //// MessageId: STATUS_STACK_OVERFLOW//// MessageText:///
阅读全文
摘要:就是TEB::StackBase-TEB::StackLimit的值约为线程栈保留大小(VC++编译器默认的是1M),就可以判断栈 爆掉了。 比如: !tebTEB at 01192000 ExceptionList: 0120134c StackBase: 01300000 StackLimit:
阅读全文
摘要:当我们用windbg调试时,经常会遇到“*** WARNING: Unable to verify checksum for xxx.dll”这样的提示,他的意思时不能校验某某模块的校验和。这一般都是我们的动态库或exe的校验和没有设置。可以做如下两种处理: 1、在VS里修改配置,重新生成 2、使用
阅读全文
摘要:简介 DBG_TERMINATE_PROCESS表示进程被调试器终止。值为0x40010004。其定义如下: //// MessageId: DBG_TERMINATE_PROCESS//// MessageText://// Debugger terminated process.//#defin
阅读全文
摘要:通过《Win32 Error》、《COM Error HRESULT 》和《NTSTATUS》等我们知道了一些win32错误基础知识,下面我们说点其他的东西。 1、GetLastError()返回一个winapi错误代码.从1开始的简单数字.它们通常从底层本机api错误代码映射。Winapi错误代码
阅读全文
摘要:系统API或COM调用,会产生错误。设置一个错误代码,可以由GetLastError检索。有几种方法可以破译此代码: 使用命令行 net helpmsg 从VS菜单中,选择工具/错误查找并粘贴代码 在VS的监视窗口上输入“$err,hr”! 在VS的监视窗口上输入 *(int*)(@tib+0x34
阅读全文
摘要:当我们的程序出了问题,想要观察程序的执行过程,这时有两种进入调试的方式: 附加到进程 调试器启动进程 这是我们常用的两种方式,那么有什么差别呢?有差别,今天我就谈一点:那就是堆内存的不同。通过附加到进程的方式(排除用其他工具做了设置)内存是标准堆;而直接用调试器启动的方式内存是系统调试堆。 我们用W
阅读全文
摘要:.NET引入了一种新的符号文件(PDB)格式——Portable PDB。与仅限Windows的传统PDB不同,Portable PDB可以在所有平台上创建和读取。 对于任何不熟悉PDB文件的人来说,PDB文件是由编译器生成的辅助文件,用于提供其他工具,尤其是调试器,有关可执行文件中的内容以及如何生
阅读全文
摘要:在《Windbg里识别CRT堆》一文里,介绍了可以通过msvcrXX.dll!_crtheap来获取crt堆的句柄。但这种方法只针对VS2015前的crt版本有效。 这是因为从 Visual Studio .NET 到 Visual Studio 2013,C++ 编译器和工具的每个主版本都包含一个
阅读全文
摘要:简介 STATUS_NO_SUCH_DEVICE,指定的驱动器不存在,值为0xC000000E,其定义如下: //// MessageId: STATUS_NO_SUCH_DEVICE//// MessageText://// A device which does not exist was sp
阅读全文
摘要:简介 STATUS_VERIFIER_STOP异常表示因Application verifier(应用程序验证器) 在当前进程找到一个错误而停止.。值为0xC0000421。其定义如下: //// MessageId: STATUS_VERIFIER_STOP//// MessageText:///
阅读全文
摘要:.printf的行为跟C语言的printf函数类似。 语法 .printf [/D] [Option] "FormatString" [, Argument , ...] 参数 /D 指定格式字符串包含调试器标记语言(DML)。 Option 指定WinDbg应将FormatString解释为的文本
阅读全文
摘要:当我们调试时,某些情况下,我们需要专门针对crt堆进行分析,但,我们知道进程里可能有多个堆,比如 你说哪个是crt堆? 如果你跟踪过crt的代码,那么这个问题就好办了,crt堆是通过msvcrt!_heap_init来分配初始化的,在_heap_init里把crt堆的句柄给了变量_crtheap,所
阅读全文
摘要:1、"windbg ANSI Command Tree 1.0"前不能有空格,或空行 2、cmdtree这个窗口的标题 title紧接着一对{""},比如title {"dump analyze"}。一定注意title和后面的内容是分离的,不要写成:title{"dump analyze"}。为了规
阅读全文