一、 dump文件生成代码

#include <windows.h>
#include <DbgHelp.h>
#pragma comment(lib, "user32.lib")
int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers)
{// 定义函数指针typedef BOOL(WINAPI * MiniDumpWriteDumpT)(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,PMINIDUMP_EXCEPTION_INFORMATION,PMINIDUMP_USER_STREAM_INFORMATION,PMINIDUMP_CALLBACK_INFORMATION);// 从 "DbgHelp.dll" 库中获取 "MiniDumpWriteDump" 函数MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL;HMODULE hDbgHelp = LoadLibrary(L"dbghelp.dll");if (NULL == hDbgHelp){return EXCEPTION_CONTINUE_EXECUTION;}pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");if (NULL == pfnMiniDumpWriteDump){FreeLibrary(hDbgHelp);return EXCEPTION_CONTINUE_EXECUTION;}// 创建 dmp 文件件TCHAR szFileName[MAX_PATH] = { 0 };TCHAR szVersion[] = L"DumpFile";SYSTEMTIME stLocalTime;GetLocalTime(&stLocalTime);wsprintf(szFileName, L"%s-%04d%02d%02d-%02d%02d%02d.dmp",szVersion, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond);HANDLE hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);if (INVALID_HANDLE_VALUE == hDumpFile){FreeLibrary(hDbgHelp);return EXCEPTION_CONTINUE_EXECUTION;}// 写入 dmp 文件MINIDUMP_EXCEPTION_INFORMATION expParam;expParam.ThreadId = GetCurrentThreadId();expParam.ExceptionPointers = pExceptionPointers;expParam.ClientPointers = FALSE;pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &expParam : NULL), NULL, NULL);// 释放文件CloseHandle(hDumpFile);FreeLibrary(hDbgHelp);return EXCEPTION_EXECUTE_HANDLER;
}LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
{// 这里做一些异常的过滤或提示/*if (IsDebuggerPresent()) {return EXCEPTION_CONTINUE_SEARCH;}*/return GenerateMiniDump(lpExceptionInfo);
}

2. 调用代码

int main(int argc, char *argv[])
{SetUnhandledExceptionFilter(ExceptionFilter);QCoreApplication a(argc, argv);
}

二、 设置Release程序可以生成pdb文件(没有pdb文件,无法调试显示代码段)

1. 设置生成pdb文件

2. 设置过程遇到的问题及解决方案

(1)报错invlaid_pointer_read 内存读取的异常,可能属于程序跑到了非代码页,这时候调用栈出现什么情况都有可能;

(2)解决方法:设置调试信息格式为c7兼容,防止读取调试信息有问题导致找不到(如果是pdb类型的程序数据库,差不多要选c7兼容);

三、 使用DUMP文件(运行exe程序时最好把pdb文件一起拷过去)

1. 将生成的dump文件放在源代码程序的exe和pdb文件所在的路径下;

2. 用vs打开dump文件(如果打开没有右侧的解决方案,可以点击vs菜单栏的视图=》解决方案资源管理器);

3. 右键解决方案,选择属性,设置源代码路径;

4. 设置符号路径即pdb文件的路径 ;

5.点击vs界面右侧的《使用仅限本机进行调试》可以查看出错代码信息;

调试之DUMP文件生成和使用相关推荐

  1. 【C/C++基础进阶系列】实战记录 -- Dump 文件生成与分析

    [C/C++基础进阶系列]实战记录 -- Dump 文件生成与分析 [1]Windows 端 Dump 文件的捕获与分析 [1.1]添加 Windows 端 Dump 捕获的代码 代码下载,windo ...

  2. Windows下dump文件生成与分析

    一.    生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键->创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...

  3. Windbg内核调试之四: Dump文件分析

    Dump 文件分析很大程度上就是分析蓝屏产生的原因.这种系统级的错误算是Windows提示错误中比较严重的一种(更严重的还有启动黑屏等硬件或软件兼容性错误等等).说它是比较严重,是因为毕竟Window ...

  4. Linux crash dump文件生成与使用

    转载自:https://blog.csdn.net/keep_moving_gogogo/article/details/44196957 不像Windows程序需手动调用相关函数,Linux程序cr ...

  5. windows7 下WOW6432Node和dump文件生成问题

    1,win7生成dump文件 在win7下一直无法生成dump文件,发现需要在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Err ...

  6. Dump文件生成,内容,以及分析

    ​​​​​​​本文用到的工具只是简单介绍,让你有个感官认识,重点是核查思路的熟悉 为啥需要dump内存文件 服务器CPU,内存占用空间飙升,或者GC频繁,首先需要排除的就是内存泄露,即内存中没有的对象 ...

  7. linux中dump文件怎么生成,linux下设置core dump文件生成的方法

    /proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展.文件内容为1,表示添加pid作为扩展名, 生成的core文件格式为      core ...

  8. dump文件类型与dump文件生成方法详解

    目录 1.概述 2.dump文件的分类 2.1.dump按大小分类 2.2.查看dump文件中函数调用堆栈中变量的值

  9. 用gdb调试core dump文件

    gdb基本的使用方法在此就不说了. 载入core文件的命令行为: dgb exe core 例如 gdb ./testall ./core.2345 最重要的一个命令是where,这个就像windbg ...

最新文章

  1. 写了 30 万行基础设施代码后,我们得出 5 个有用的经验
  2. 鸿蒙系统能否推广,鸿蒙系统凭实力占市场,无需通过禁止安卓系统来推广
  3. JAVA HASHMAP 用法
  4. mysql max字符串数值_针对字符串值的mysql:min()和max()。
  5. 9 QM配置-检验计划配置-维护检验类型
  6. AC日记——小木棍【数据加强版】 洛谷 P1120
  7. 53. 使 Ajax 可缓存(14)
  8. windows下如何用python抓取邮件内容和附件_用python下载邮件内容
  9. 《大数据》2022年第3期目次摘要
  10. matlab张正友程序,张正友标定程序—MATLAB
  11. We will rock you (我们将震憾你)
  12. printf二进制输出
  13. 强烈建议你把这5个跨境神器都收藏了
  14. mac自带邮箱添加邮箱_如何在Mac上的Mail中创建或删除邮箱
  15. 互联网晚报 | 1月8日 星期六 | 小米商城已支持数字人民币支付;微信视频号将上线付费直播间;苹果CEO去年薪酬近1亿美元...
  16. 小米电视1代上半屏背光闪的问题解决
  17. 电机FOC中的坐标变换(CLARK+PARK+公式推导+仿真+C语言实现)
  18. Mac idea打开项目Java文件和resources文件都被标记了resources类型
  19. python自动化运维:python环境的安装
  20. 关于adsl宽带猫的一个奇怪问题

热门文章

  1. oracle 学习积累(3)
  2. 5G/NR 为什么RRC新增RRC_INACTIVE态?
  3. comsol结构力学-应力应变仿真
  4. H.264 NALU分隔Annex B和avcC
  5. IP 地址详解(IPv4、IPv6)
  6. 群晖wordpress如何连接mysql,「全网首发」群晖wordpress二级目录下实现IP加端口访问教程...
  7. 蓝桥杯刷题007——七段码
  8. JAVA文件搜索过程中如何得到各种文件内容(office文件,PDF,邮件,mht,思维导图等)
  9. 12306抢票JS脚本
  10. JS提示缺少对象的一种解决办法