当前位置: 首页 > news >正文

Window C++ Postmortem Debugger

开发出一款应用在上线运行可能会出现突然暴毙崩溃的情况,这时候该如何排查出原因呢,
如果可以"开棺验尸"的话,就应该可以轻松找出原因并改正。

异常钩子 SetUnhandledExceptionFilter

#include <Windows.h>
#include <cstdint>
#include <DbgHelp.h>

LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* pExp)
{
	HANDLE hFile = CreateFile(L"Crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile != INVALID_HANDLE_VALUE) {
		MINIDUMP_EXCEPTION_INFORMATION mdei = { GetCurrentThreadId(), pExp, FALSE };
		MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
			static_cast<MINIDUMP_TYPE>(MiniDumpWithFullMemory | MiniDumpWithHandleData),
			&mdei, NULL, NULL);
		CloseHandle(hFile);
	}
	return EXCEPTION_EXECUTE_HANDLER;
}


int main()
{
	SetUnhandledExceptionFilter(ExceptionFilter);

	DebugBreak(); // 触发一次崩溃

    return 0;
}

运行程序后在程序目录中会有一个Crash.dmp文件
使用WinDbg打开
在这里插入图片描述
在这里插入图片描述
可以看到这是一个MiniDump文件,并成功打开了
现在使用!analyze -v 简单分析下
在这里插入图片描述
很容易找到引发崩溃的位置

WinDbg -I

管理员权限打开CMD,然后cd到WinDbg的目录下,执行windbg.exe -I
在这里插入图片描述
看到这样界面就是WinDbg注册为默认的Postmortem Debugger 成功了
在这里插入图片描述

如果想取消注册可以使用命令windbg.exe -IU

现在有程序

#include "stdafx.h"
#include <Windows.h>
#include <DbgHelp.h>

int main()
{
	DebugBreak();

    return 0;
}


运行后立即弹出
在这里插入图片描述
简单看一下调用堆栈
在这里插入图片描述

相关文章:

  • opencv(C++)图像的读写、翻转、绘制、鼠标事件
  • 源码分析之Leaflet中control模块Control基类实现原理
  • Vue2 通过 Object.defineProperty 对哪些数组进行了特殊处理?
  • C语言中的内存管理:掌握动态分配的技巧
  • 雪花算法生成的主键存在哪些问题,为什么不能使用自增ID或者UUID做MySQL的主键
  • git 对比两种优化方法的性能
  • MySQL主从复制(二)
  • Go语言入门指南:从语法基础到核心特性解析
  • 【C++】mapset使用与实战 OJ题
  • ABAP RANGE表 OPTION 运算符 SIGN
  • 无人机数据链技术及运行方式详解!
  • python生成并绘制各种类型声音噪声
  • xfreerdp 的使用
  • Spring的 init-method, @PostConstruct, InitializingBean 对比
  • 【鸿蒙5.0】两个数组,点击事件两个数组数据进行了双向数据交换,双向绑定的原理是什么?
  • JVM——模型分析、回收机制
  • 学透Spring Boot — 007. 加载外部配置
  • 【蓝桥杯14天冲刺课题单】Day 8
  • MQTT 服务器(emqx)搭建及使用(二)
  • 【原创】使用Golang和wails开发桌面程序初探
  • 上海发文加强直播经济技能人才培养:三年新培养持证直播技能人才5万名
  • 上海徐汇 “家 + 书屋”,创新服务广大家庭
  • 纽约市长称墨西哥海军帆船撞桥事故已致2人死亡
  • 爬坡难下坡险,居民出行难题如何解?
  • 广西壮族自治区政府主席蓝天立任上被查
  • 澳大利亚首例“漂绿”诉讼开庭:能源巨头因“碳中和”承诺遭起诉