windbg初学记录
windbg下载地址 根据自己配置下载相应的版本(内含Win10符号文件)
windbg配置
打开 Symbol file Path
配置如下
srv*D:\symbols*http://msdl.microsoft.com/download/symbols;D:\pdb
按照这样设置,Windbg将先从本地文件夹d:\symbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载Symbols) 现在微软不提供符号下载的离线包,只能通过这种方式下载。点击ok之后,等待符号文件下载完成。D:\pdb 则是代码生成的PDB文件。
生成dump 文件
#include <iostream>
#include<Windows.h>
#include<DbgHelp.h>
#include <time.h>
#pragma comment(lib,"dbghelp.lib") LONG CrashHandler(EXCEPTION_POINTERS* pException)
{
time_t ti;time(&ti);char buffer[1024] = {
0 }; sprintf_s(buffer, "./dump_%lld.dump", ti);WCHAR wszfileName[1024];memset(wszfileName, 0, sizeof(buffer));MultiByteToWideChar(CP_ACP, 0, buffer, strlen(buffer) + 1, wszfileName,sizeof(wszfileName) / sizeof(wszfileName[0]));HANDLE dumpfile = CreateFile(wszfileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);MINIDUMP_EXCEPTION_INFORMATION dumpInfo;dumpInfo.ExceptionPointers = pException;dumpInfo.ThreadId = GetCurrentThreadId();dumpInfo.ClientPointers = TRUE;MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), dumpfile, MiniDumpNormal, &dumpInfo, NULL, NULL);CloseHandle(dumpfile);return EXCEPTION_EXECUTE_HANDLER;
}void testFunc(int* p)
{
*p = 1;
}
int main()
{
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashHandler);testFunc(NULL);return 0;
}
windbg调试
- windbg 中 File-> Open Crash Dump 找到刚才生成的dump 文件打开
- 执行命令 !analyze -v
可以看到崩溃错误原因为 NULL_POINTER_WRITE