初步使用umdh

使用 UMDH 之前
1: _NT_SYMBOL_PATH 环境变量设置为 Microsoft 符号服务器的路径,以便 UMDH 可以找到调试符号文件。
符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试
信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的
变量信息都记录在这个文件中。所以调试应用程序时,这个文件是非常重要的。用 Visual C++ 和 WinDbg 
调试程序时都要用到这个文件。http://baike.baidu.com/view/3788304.htm?fr=aladdin

具体做法:第一次的时候需要下载symbol files 文件:cmd->set _NT_SYMBOL_PATH=SRV*D:\Symbols*http://msdl.microsoft.com/download/symbols
意思为设置环境变量_NT_SYMBOL_PATH为路径D:\Symbols,若是没有D:\Symbols路径则到http://msdl.microsoft.com/download/symbols
中去下载pdb文件
 第二次的时候symbol files文件已经下好,可以直接进行设置环境变量cmd->set _NT_SYMBOL_PATH=D:\Symbols或者在计算机属性系统设置环境变量
新增加name:_NT_SYMBOL_PATH value:D:\Symbols
2:设置gflags
cmd->cd C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86
其中debuggers为调试工具:下载地址http://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx
我是下的第三种方式,在调试工具中有gflags.exe和umdh.exe
gflags -i  ConsoleApplication2.exe +ust
其中ConsoleApplication2.exe 为需要监视的程序名
3:启动ConsoleApplication2.exe 然后执行一次umdh
umdh -p:78920 -f: F:\test1.log
其中p为ConsoleApplication2.exe 进程PID
4.umdh -p:78920 -f: F:\test2.log
5.umdh -d F:\test1.log F:\test2,log > F:\test_com.txt
加上-d是数字显示为10进制,不然默认显示16进制


在F:\test_com.txt中看到


+     136 (    136 -      0)      1 allocs BackTraceC80C4
+       1 (      1 -      0) BackTraceC80C4 allocations


ntdll!RtlAllocateHeap+274
MSVCR120D!heapwalk+281
MSVCR120D!free_dbg+77F
MSVCR120D!msize_dbg+28D
MSVCR120D!msize_dbg+23A
MSVCR120D!malloc+19
MSVCR120D!operator new+F
ConsoleApplication2!operator new[]+C (f:\dd\vctools\crt\crtw32\stdcpp\newaop.cpp, 6)
ConsoleApplication2!main+85 (f:\ework\consoleapplication2\consoleapplication2\source.cpp, 11)
ConsoleApplication2!__tmainCRTStartup+199 (f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c, 626)
ConsoleApplication2!mainCRTStartup+D (f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c, 466)
kernel32!BaseThreadInitThunk+E
ntdll!__RtlUserThreadStart+70
ntdll!_RtlUserThreadStart+1B


+     136 (    136 -      0)      1 allocs BackTraceC8158
+       1 (      1 -      0) BackTraceC8158 allocations


ntdll!RtlAllocateHeap+274
MSVCR120D!heapwalk+281
MSVCR120D!free_dbg+77F
MSVCR120D!msize_dbg+28D
MSVCR120D!msize_dbg+23A
MSVCR120D!malloc+19
ConsoleApplication2!main+A1 (f:\ework\consoleapplication2\consoleapplication2\source.cpp, 12)
ConsoleApplication2!__tmainCRTStartup+199 (f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c, 626)
ConsoleApplication2!mainCRTStartup+D (f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c, 466)
kernel32!BaseThreadInitThunk+E
ntdll!__RtlUserThreadStart+70

ntdll!_RtlUserThreadStart+1B

ConsoleApplication2 为:

#include<iostream>
#include<string.h>
#include<stdlib.h>
#include <Windows.h>
using namespace std;
int main()
{
cout << 'a'<<endl;
Sleep(20000);
cout << 'b'<<endl;
char* strBuffer1 = new char[100];
char* strBuffer2 = (char*)malloc(100);
Sleep(20000);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值