当前位置: 代码迷 >> 综合 >> Windows windbg 初学记录
  详细解决方案

Windows windbg 初学记录

热度:37   发布时间:2023-11-25 06:30:50.0

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调试

  1. windbg 中 File-> Open Crash Dump 找到刚才生成的dump 文件打开
  2. 执行命令 !analyze -v
    在这里插入图片描述
    可以看到崩溃错误原因为 NULL_POINTER_WRITE
  相关解决方案