描述:
用的QQ都知道,如果QQ发生崩溃,QQ就会弹出一个自己的崩溃提示窗口,然后你可以点发送把崩溃信息发给软件开发商,替代了windows自带的Dr.Watson调试工具。
哪位达人懂啊,最好能给兄弟个源码。
E-Mail: eiko.ding@gmail.com
解决方案1:
///////////////////////////////
#include "PSErrDlg.h"
LONG WINAPI MyExceptionFun(struct _EXCEPTION_POINTERS *ExceptionInfo )
{
CPSErrDlg dlg;
dlg.DoModal();
return EXCEPTION_EXECUTE_HANDLER; // 直接退出程序
//return EXCEPTION_CONTINUE_EXECUTION; // 好像是递归调用了自己的异常处理
//return EXCEPTION_CONTINUE_SEARCH; // 继续处理异常
}
extern"C" __declspec(dllexport) void WINAPI InitErrHandle()
{
/*
//////////////////////////////////////////////////////////////////////////
// DetourFunctionWithTrampoline 作用 //
// 1. 保存被修改的入口代码 --> Trampoline 函数中 //
// 2. 修改目标函数入口(接管目标函数) //
//////////////////////////////////////////////////////////////////////////
// before Detouring a Function (此时三个函数[Target ,Trampoline, Detour]都是正常的状态,状态见 detour ppt 文档)
DetourFunctionWithTrampoline((PBYTE)trampoline_MyFun,(PBYTE)MyFunDetour);
*/
////////////////////////////////////////////
SetUnhandledExceptionFilter(MyExceptionFun);
/*
typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)(
struct _EXCEPTION_POINTERS *ExceptionInfo
);
*/
}
extern"C" __declspec(dllexport) void WINAPI ReleaseErrHandle()
{
// DetourRemove((PBYTE)trampoline_MyFun,(PBYTE)MyFunDetour);
SetUnhandledExceptionFilter(NULL);
}
同意捕获异常
解决方案3: 编译程序的时候,不对代码进行优化,然后在代码中使用
try{}catch (...){}
就可以捕获异常了。
例如:
try{
char *p = 0;
strcpy(p, "this is a test");
}
catch (...)
{
MessageBox(0, "catch an error.", 0, MB_OK);
}
记住一定要把代码优化禁用,否则catch无效。
肯定是异常
解决方案5:学习
解决方案6:windows核心编程里有的,结构化异常处理。SetUnhandledExceptionFilter
解决方案7: 会不会在
catch()
时处理了这些异常,然后自动发邮件的呢
用的次数少,所以我的QQ没有
UP
lightwell(大道不过两三行)说的是正解。
MSDN上的BugLayer有例子好像是Jeffry的,你可以去找一下。
捕获了异常
解决方案11: 会不会是创建一个守候进程,定时用GetExitCodeProcess得到QQ进程的退出码来实现的?
如果非正常退出就提示.