您的位置:首页 > 其它

初步使用umdh

2014-09-19 15:38 127 查看
使用 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) BackTraceC80C4allocations

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) BackTraceC8158allocations

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  调试 umdh