windows环境下定位随机崩溃
来源:互联网 发布:qq mac版怎么更新 编辑:程序博客网 时间:2024/04/29 10:52
转自:http://blog.csdn.net/xiezhenghai/article/details/7186414
定位崩溃所需要的文件支持
*.pdb(应用程序调试数据库)
*.dmp(崩溃存储文件)
*.exe / *.dll(应用程序文件)
pdb文件的生成
设置:项目>属性>链接器>调试>生成程序数据库文件
Debug模式下生成PDB文件路径:
1.$(your projects)/运行/debug/client/pdbs/$(ProjectName).pdb
2.$(your projects)/运行/debug/server/pdbs/$(ProjectName).pdb
Release模式下生成PDB文件路径:
1.$(your projects)/运行/release/client/pdbs/$(ProjectName).pdb
2.$(your projects)/运行/release/server/pdbs/$(ProjectName).pdb
dmp文件的生成
1. 包含minidmp.h头文件
2. 在应用程序入口调用:SetUnhandledExceptionFilter(MRUnHandledExceptionFilter);
3. 应用程序运行时自动生成,存放在:/运行/release(debug)/client/dmps/ 目录
定位崩溃点
调试工具windbg或者vc/vs,下面介绍windbg使用
调试步骤:
1. File>Symbol file path>设置*.pdb文件的路径
2. File>Image file path>设置可执行文件的路径
3. File>Source file path>设置源代码路径($(your projects))
4. File>Open Crash Dump>打开崩溃文件*.dmp
5. 输入命令 .ecxr
建议
针对以上调试需要,在每发布一个版本进行测试之前,都要保存对应的PDB文件,而且这个版本的代码要在SVN上打标签,以备程序放出去以后源代码还受跟踪。
下面是minidmp.h文件的实现
#ifndef __MINIDMP_H__
#define __MINIDMP_H__
#include <windows.h>
#include <imagehlp.h>
#include <stdlib.h>
#include <time.h>
#pragma comment(lib, "dbghelp.lib")
inline void CreateMiniDump(EXCEPTION_POINTERS* pep, HANDLE hFile)
{
if((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
{
if (pep == NULL)
{
::MessageBoxA(0, "continue to exception", "NOTE", MB_OK);
__try
{
RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);
}
__except(CreateMiniDump(GetExceptionInformation(), hFile), EXCEPTION_CONTINUE_EXECUTION)
{
}
}
else
{
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MiniDumpNormal,
pep ? &mdei : NULL,
NULL, NULL);
}
CloseHandle(hFile);
}
}
LONG WINAPI MRUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
CreateDirectoryA("dmps", NULL);
char lpFile[255] = {0x00};
time_t t = time(0);
strftime(lpFile, sizeof(lpFile), "dmps\\%Y-%m-%d %H-%M-%S.dmp",localtime(&t));
HANDLE hFile = CreateFileA(lpFile,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
CreateMiniDump(pExceptionInfo, hFile);
return EXCEPTION_EXECUTE_HANDLER; // 程序停止运行
}
#endif
- windows环境下定位随机崩溃
- windows环境下定位随机崩溃
- 在知道崩溃函数地址的情况下定位函数名和函数中的行号
- Android下定位开发
- iOS8下定位
- HPUX下定位网卡位置
- Linux下定位命令总结
- iOS8 下定位失败问题
- iOS8 下定位失败问题
- iOS8 下定位失败问题
- Linux下定位内存泄漏
- iOS8 下定位失败问题
- 32位正常,64位随机崩溃问题
- 在VC下定位内存泄漏总结
- webdriver下定位frame和alert
- linux下定位问题的几个工具
- linux下定位段错误(转)
- iOS8 下定位 (CLLocationManager) 的改變
- 计算机产业、互联网造富的时代
- JAVA读取文件名
- Service中加入死循环
- C# 检测网络异常断开(非正常通信中断)
- CwinApp,CView,Cframe之间的关系
- windows环境下定位随机崩溃
- JAVA读取文件名二
- 开心的小明
- 获取元素CSS值之getComputedStyle方法熟悉
- [问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?
- Android代码混淆第三方jar,can't find referenced class的解决
- JAVA定时任务的简单实现
- Precision and Recall
- android读取大图片并缓存