说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于 VS2010 异常捕获

HTML文档下载 WORD文档下载 PDF文档下载
好长时间没来了,都变了,幸亏帐号还在,密码也好记得。祝 vckbase/okbase 越来越好吧。记录一下:程序异常崩溃前的信息。

//=========================================================================.h#include "DbgHelp.h"  //调试信息#pragma comment( lib,"DbgHelp.lib" )private: //异常结构体,定义在 WINNT.h 里 _EXCEPTION_POINTERS * m_epi; //获得异常结构体的解释文本 CString GetException(_EXCEPTION_POINTERS *epi); //获得一个模块地址的全路径 CString GetExceptionPath(LPVOID addr); //获得异常信息的参数解释文本 CString GetExceptionParam(ULONG_PTR* Info,int iCount); //=========================================================================.cpp// ---------------------------------------------------------------// 名称: GetException// 功能: 根据异常结构体,解释出能够识别的文本信息,含中、英文双语信息// 变量: [in] pei -- 异常信息的结构体// 返回: 解释后的文本// 编写: // ---------------------------------------------------------------CString CLogs::GetException(_EXCEPTION_POINTERS *pei){ if( NULL==pei )	return _T(""); STACKFRAME    sf; CONTEXT       ct; CString sPath,sInfo,sTemp,sErr_CN,sErr_EN; sPath = GetExceptionPath( pei->ExceptionRecord->ExceptionAddress ); sInfo = GetExceptionParam( pei->ExceptionRecord->ExceptionInformation,pei->ExceptionRecord->NumberParameters );  //------------------------------------------------- //程序运行到这里,可能已经没有机会获取多国语言资源了 //所以直接硬编码,采用中、英文双语提示,其他对话框请勿使用这种方式 CString sep = _T("------------------------------------------------------------------\r\n"); sErr_CN = sep; sErr_EN = sep; sTemp.Format( _T("很抱歉,遇到了未知异常,程序需要暂时关闭。\r\n代码: 0x%08X, 标志: 0x%08X, 地址: 0x%08X\r\n")      _T("参数: %d  %s,模块:%s\r\n"),     pei->ExceptionRecord->ExceptionCode,pei->ExceptionRecord->ExceptionFlags,pei->ExceptionRecord->ExceptionAddress,     pei->ExceptionRecord->NumberParameters,sInfo,sPath ); sErr_CN += sTemp; sTemp.Format( _T("Sorry, Dump An unkonw error, need to close program.\r\nCode: 0x%08X, Flag: 0x%08X, Address: 0x%08X\r\n")      _T("Param: %d  %s,Module:%s\r\n"),     pei->ExceptionRecord->ExceptionCode,pei->ExceptionRecord->ExceptionFlags,pei->ExceptionRecord->ExceptionAddress,     pei->ExceptionRecord->NumberParameters,sInfo,sPath ); sErr_EN += sTemp; //------------------------------------------------- 	memset( &sf,0,sizeof(STACKFRAME) );    memcpy( &ct,pei->ContextRecord,sizeof(CONTEXT) );	sf.AddrPC.Offset    = ct.Eip;    sf.AddrPC.Mode      = AddrModeFlat;    sf.AddrStack.Offset = ct.Esp;    sf.AddrStack.Mode   = AddrModeFlat;    sf.AddrFrame.Offset = ct.Ebp;    sf.AddrFrame.Mode   = AddrModeFlat;    DWORD machineType   = IMAGE_FILE_MACHINE_I386;    HANDLE hProcess     = GetCurrentProcess();    HANDLE hThread      = GetCurrentThread();    SymInitialize( hProcess,NULL,TRUE );    for( ;; )	{		if( !StackWalk( machineType,hProcess,hThread,&sf, &ct,0,SymFunctionTableAccess,SymGetModuleBase,0) )		{			break;        }		if( sf.AddrFrame.Offset==0 )		{			break;        }		BYTE symbolBuffer[ sizeof(SYMBOL_INFO) + 1024 ];        PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)symbolBuffer;        pSymbol->SizeOfStruct = sizeof(symbolBuffer);        pSymbol->MaxNameLen = 1024;          //-------------------------------------------------    sTemp.Format( _T("偏移地址:0x%08X\r\n"),sf.AddrPC.Offset);  sErr_CN += sTemp;  sTemp.Format( _T("Offset:0x%08X\r\n"),sf.AddrPC.Offset);  sErr_EN += sTemp;  //-------------------------------------------------        if( SymFromAddr(hProcess,sf.AddrPC.Offset,0,pSymbol) ) {   #if _UNICODE    //-------------------------------------------------    LPCWSTR wstr = AnsiToUnicode( pSymbol->Name );    sTemp.Format( _T("函数: %s\r\n"),wstr );       sErr_CN += sTemp;    sTemp.Format( _T("Function: %s\r\n"),wstr );      sErr_EN += sTemp;        delete [] wstr;    //-------------------------------------------------   #else	sTemp.Format( _T("函数: %s\r\n"),pSymbol->Name );       sErr_CN += sTemp;    sTemp.Format( _T("Function: %s\r\n"),pSymbol->Name );      sErr_EN += sTemp;#endif}           	IMAGEHLP_LINE lineInfo = { sizeof(IMAGEHLP_LINE) };	DWORD dwLineDisplacement;	if( SymGetLineFromAddr( hProcess, sf.AddrPC.Offset, &dwLineDisplacement, &lineInfo ) ) {   	#if _UNICODE    //-------------------------------------------------    LPCWSTR wstr = AnsiToUnicode( lineInfo.FileName );	sTemp.Format( _T("源文件: %s, 错误行: %u\r\n"), wstr,lineInfo.LineNumber );    sErr_CN += sTemp;    sTemp.Format( _T("File: %s, Line: %u\r\n"), wstr,lineInfo.LineNumber );    sErr_EN += sTemp;    delete [] wstr;    //-------------------------------------------------   #else    	sTemp.Format( _T("源文件: %s, 错误行: %u\r\n"), lineInfo.FileName,lineInfo.LineNumber );    sErr_CN += sTemp;    sTemp.Format( _T("File: %s, Line: %u\r\n"), lineInfo.FileName,lineInfo.LineNumber );    sErr_EN += sTemp;#endif           }       }       SymCleanup( hProcess );   //-------------------------------------------------  sErr_CN += sep; sErr_EN += sep; //------------------------------------------------- return (sErr_CN + sErr_EN);}// ---------------------------------------------------------------// 名称: GetExceptionPath// 功能: 根据异常地址,解释并获得对应的模块全路径// 变量: [in] addr -- 异常信息的结构体// 返回: 异常地址对应的模块全路径// 编写: // ---------------------------------------------------------------CString CLogs::GetExceptionPath(LPVOID addr){ CString sRet = _T(""); MEMORY_BASIC_INFORMATION mbi = {0}; if( FALSE==::VirtualQuery(addr,&mbi,sizeof(mbi)) ) return sRet; UINT_PTR hMod = (UINT_PTR)mbi.AllocationBase; TCHAR szFilePath[MAX_PATH+1]; GetModuleFileName( (HMODULE)hMod,szFilePath,MAX_PATH ); sRet = szFilePath; return sRet;}// ---------------------------------------------------------------// 名称: GetExceptionParam// 功能: 将异常参数信息解释为可识别的文本// 变量: [in] Info -- 异常信息参数//   [in] iCount -- 参数的个数// 返回: 解释后的文本// 编写: // ---------------------------------------------------------------CString CLogs::GetExceptionParam(ULONG_PTR* Info,int iCount){	int i = 0;	CString ss, sRet = _T("");	for( i=0;i<iCount;i++ ) {    ss.Format( _T("%08X "),Info[i] );      sRet += ss;   } return sRet;} //=========================================================================调用// ---------------------------------------------------------------// 名称: XDumpException// 功能: 发生异常时,写入 log/dump 文件,并弹出异常信息对话框// 变量: [in] epi -- 异常信息的结构体// 返回: 1,系统异常// 编写: // ---------------------------------------------------------------LONG WINAPI XDumpException(struct _EXCEPTION_POINTERS* epi){   DWORD dwCode = epi->ExceptionRecord->ExceptionCode;  if( dwCode==EXCEPTION_ACCESS_VIOLATION ) {    //转到这里去处理    CLogs log;  log.Dump( epi ); } return EXCEPTION_EXECUTE_HANDLER;}// CGMMainApp 初始化BOOL CGMMainApp::InitInstance(){ //---------------------------------------------------------- //异常信息输出,独立运行时有效,VSS 调试环境下无效  SetUnhandledExceptionFilter( XDumpException );
顺便说一下,这个编辑器不好用哦,光标不随鼠标点击走,用上下键,很费劲的。我是WIN7+IE10,其他童鞋是不是也有这种情况?

 

 

Objective-C之父Brad Cox访谈:我的编程之路 【先锋】完成B轮融资的TalkingData新商业模式:平台理念+跨界分析+技术开源 1/10计算资源,1/3耗时,Spark颠覆MapReduce保持的排序记录 Cookie已死,看Facebook、Google、Apple如何追踪用户 Clay.io基于AWS、Docker、HAProxy等的10X架构打造 经典服务/企业号案例来袭!2014微信开发者大会(深圳)亮点抢先看 移动应用云APICloud宣布完成A轮500万美金融资 从Apache Storm学到的经验教训 【CTO俱乐部走进天津】探讨如何成为技术团队管理者 不容错过!参加MDCC 2014移动开发者大会八个理由 你的钱被洗劫了么!APP安全问题来袭 10大最常见的数据库安全问题 南航微信服务号是如何炼成的? 超40项功能改进,虚幻引擎4.5正式发布! 【工具推荐】ER:可轻松构建一站式AJAX Web应用的开发框架 GraphLab:将大数据分析从理念运用到生产 支持Android 5.0:完全用Ruby的Ruboto框架迎1.2.0更新! 万物互联第一步:采用AllJoyn技术的智能硬件 【专访】敏捷专家何勉:让测试成为拉动组织敏捷实施的力量 Docker与微软合作 支持Windows Server 企业号热问热答——来深圳微信开发者大会聆听一线讲师的实战分享 AngularJS 1.3.0正式发布 超光速发展! 学个痛快!十款不容错过的Swift iOS开源项目 HTML5:助力智能电视生态实现新跃迁 MDCC 2014移动开发者大会公布全部议程 求更密集!Apple Watch SDK将于11月正式开放 【答疑】微信开放平台开发者资质认证 专访Informatica亚太和日本区副总裁Murray Sargant:中国公司正考虑数据资产货币化 Facebook又开源:让iOS应用界面极致流畅的ASDK框架 一周消息树:盘点史上最具毁灭性的软件Bug 微信公众平台设备功能支持个人开发者接入 All-in-Wonder Radeon 是不是不支持 Real Producer???? 用ACCESS设计了一个报表,在VB中如何调用? 支持ASP、PHP高迅特价主机:(推荐)dtp.51.net 套接字问题再次提问 C#参考文档要的举手啊! 怎样做服务程序? (在系统后台运行) TComboBox的text能否设为只读? 站点属性中“应用程序保护”有三个选项,分别是---低,中,高。有什么区别吗?安全性有什么不同?为什么有的isapi程序必须设置成低才能正确执行啊? 怎样才能使Web页上的ACTIVEX控件自动下载注册? ADO 与 DATA MODUAL 怎样判断一个文本文件中的数据。 绝对的诚意邀请高手加盟 请问邮件服务器,如何用java实现,最好有源代码,谢谢了,急 急贴:>>>>>>>>>>>>>>>>>>>>>>>>>>这里有英语好的网络专家吗? 关于java中的画矩形 哪里有将股票数据转换成数据库格式的工具? 从哪里能找到用opengl绘制三维图形的源码?基于unix下的。 asp 怎么判断客户端的操作系统还有屏幕大小什么的? 卡在了一个错误里出不来,求救! 谁知道??????求救~~~~用asp操作注册表,从注册表中删除指定的主键! 何处能找到用opengl绘制三维图形的源码?基于unix下的 谁有多种字符窜转换的方法或代码呀? 用JBuilder5做的数据库应用程序怎么打包? 我的机器上没有装outlook,当我点击mailto时,就直接链接到hotmail的邮箱,怎么回事那 请问我在一个窗体里拖动了十几个ADODC控件,启动时很慢请问我该怎么样 怎样调整图片适应"picturebox"大小 请问那位大哥有求切线的C程序。 关于赵薇着装的讨论可以停止了 怎样远程连接安装在Linux 上的Mysql数据库? 谁能帮我解压缩从huizen.dds.nl/~roalt/h263.html下载的 H263软件 真诚的希望你加入振兴软件产业的 事业中来 两个函数之间变量可以共享吗 拷贝ACCESS 库 请教高手(关于数据结构)的一个问题 关于Rundll32.exe程序的问题 播放AVI动画的问题 c#和asp.net有什么关系? 串口打不开怎么办? 请问各位大虾,怎样在java里打开一个IE窗口。 网络问题! 我的浏览器怎么了? 在局域网中,如何在代理服务上作手脚,使处同一局域网某些人可以上网,某些人不能上网。各位帮忙! 如何制作安装盘,我的做好了,为什么到别的机器上安装不能运行 急急急·高手帮忙,在Java中引用C++的动态链接库,中文字符串参数变成乱码,怎么办? 有前锁问题 找个扫雷源程序! 发送邮件时,对现在大部网站要求的smtp认证,如何处理?急用! 连接的ACESS数据库可以是EXCEL的链接表吗? 神呀救救我吧? 谁知道哪有Delphi写的代理服务器源代码? 关于MFC的动态生成对象的问题 什么是X射线辐射 机械加工零件怎么估价,就是拿到一份零件图纸,要怎么知道是用哪种加工工艺,需要加工多少时间? 彩虹有几种颜色7 被X光长期辐射会怎么样我在钢铁厂上班,图上的机器是用X光来检测钢板厚度,我工作的是检查钢板质量,距离这机器有两米的距离,但是我常常要很靠近,0.5米左右,基本上8小时上班,我在1.5米内的 机械加工工艺基础1.车削加工中粗加工切削用量选择的原则.2.被加工零件为有色金属材料,加工方案有两种:一、钻—扩-粗铰 二、钻-粗镗-粗磨哪个方案合理可行,为什么?3.试对零件结构设计 类似于粗糙度仪,粗糙度计,粗糙度测量仪,粗糙度测试仪这样的产品在南京什么公司有销售的 X射线探伤仪不拍照的时候有没有辐射 机械加工工艺应注意什么? 空气负离子浓度测试仪在青岛有销售的吗 万能外圆磨床精度要求请问万能外圆磨床大修后的国家精度要求是多少?还有就是,现在磨床出现磨300mm长的产品出现误差达到0.01mm.从复精度误差精度比较大?请问这是哪里出的问题?因该如何处 电镀镍表面未电镀完全我想问一下,电镀镍的时候,样品表面经过了多次除油等表面处理,可是电镀过程中出现跟地图一样的,只有少数地方电镀上了,经过好几个小时了,其他的地方才逐渐电镀上. 某机械厂要铸造100个铁质的机件,铸造该机件的木模用的木料的密度为0.7g/cm3,每只木模质量是4.2kg,求所铸造的这100个机件的总质量 万能外圆磨床和普通外圆磨床的区别有哪些? 请问电镀镍的时候,电镀时间比标准时间缩短,而电流变大,会对产品有什么影响?电镀厚度,是否会有差异,外观和性能会不会有影响? 苯检测仪,VOC检测仪在青岛有销售的吗 外圆磨床与无心外圆磨床的区别? 为什么在太阳下闭上眼,能看到各种颜色?睁开眼后为什么一切都瞬时变黑白色? 2、铸造铁质零件时,木模用密度为0.7g/cm的立方的樟木造成的,模型的质量是3.5kg,如果要铸造这样的零件100个,按120%下料,最少要多少千克水?(铁的质量:7.9g/cm的立方) 光盘反射层脱落怎么修补?我又一张重要的光盘,盘面没有丝毫划伤,但是光盘反射层又一小块脱落,所以导致无法正常读取,怎么修补?又反射涂层油漆可以涂吗? 将以光碟放在阳光下,有何发现?描述你所观察到的现象. 测量仪器和网络测试仪分别有哪些品牌,他们属于哪个国家的,有何特点与优势,国内哪些代理商在代理?帮帮 光盘的反射层有害吗 CNC加工中心主要能做那些模具?做零件的是那种? 泄漏电流测试仪等测量仪器 每一台都要拿去 做检测报告吗?如题,像我们公司的产品电热毯等,只要拿样品做检测报告就行了.我们供应商的这种泄漏电流测试仪 每一台都要有单独的检测报告的 管道2级探伤【X光探伤】那些缺陷不合格 内径 粗糙度测量我公司一个产品 直径在Ø 8.纵深为40mm .RZ 2.4..想在不切割的情况下测量它的粗糙度,请大家推荐下仪器.. 由水反射出的彩虹颜色怎样排列的?最上面的是什么颜色?把镜子放在水中 一束光照在镜子上 放射出去的光 最上面的应该是什么色的? 铁的比重 为什么不可以用X光的底片来看用多层可以吗 粗糙度测量中都要测量哪些参数 各种颜色反射吸收阳光的例子比如冬天穿衣穿深色,夏天穿浅色:南方房屋漆浅色,北方漆深色;装油用的船船身漆白色;在雪上铺煤灰.除了这些,还有什么关于颜色反射与吸收阳光的例子? 我老公是干x射线无损检测的,请问他不接触多久才能要孩子?如果不小有了孩子.请问至少他不接触射线多少天的孩子才能要.对孩子有什么影响? 硅片表面的粗糙度怎样测量 科学好的来!我们说物体是因为反射可见光所以呈现各种颜色,但是在晚上,物体还是呈现各种...科学好的来!我们说物体是因为反射可见光所以呈现各种颜色,但是在晚上,物体还是呈现各种颜色, 什么是点焊焊接?什么是电阻焊焊接?什么是激光焊接? 接触式和非接触式粗糙度测量的区别哪些地方有差异? 因为物体反射光,所以我们看到各种颜色,也就是说,物体是因为能反射某种颜色的光我们才看到五彩缤纷的世界,那么我们物体就是没有色彩的了? 粗糙度是否会影响焊接质量 为什么三棱镜会反射出彩虹老师给我们上课时弄的实验这是为什么啊 还有为什么看的明显的只有三个颜色——红、黄、紫我们是下午大概两三点时做的实验不要只会打一个啊 我前几天被射线辐射到了,无损探伤的当时探伤的管道厚度是18mm,被近距离,大约半米,照射五分钟...我前几天被射线辐射到了,无损探伤的当时探伤的管道厚度是18mm,被近距离,大约半米,照射五分 判断:物体的颜色是由他所反射光的颜色决定的( ) 彩虹与三棱镜彩虹是空气中的水珠折射出来的,相当于三棱镜,但空气中那么多水珠怎么只能形成一道彩虹?而且为什么彩虹是弯的?究竟多少水珠相当于一个三棱镜? B超向人体发射——,同时接受体内脏器的——超声探伤对人体——伤害 苏州激光焊氩孤焊接加工 牛顿做三棱镜试验时把日光分为六色还是七色 无损检测射线照片的辐射对身体有多大伤害(没有在安全距离)会有什么后遗症吗 为什么不同的物体反射不同的光?形成不同的颜色.跟物质本身的性质有关吗?跟那一种性质有关? 三棱镜和阳光怎么可以作出彩虹七色光也行 物体是白色的,是因为反射各种光线,物体是黑色的,是因为吸收各种光线,那酒精是无色的是因为什么? 物体的颜色是由它所反射光的颜色决定的对不对 关于零件粗糙度测量仪器不同系统测出来的粗糙度值差异较大的疑问.我公司最近一批产品在客户处投诉密封孔粗糙度超差.我公司内部使用的是哈量的设备采用的应当是国标,测出来Rz 2 左右, 为什么白色反射所有光,黑色吸收所有光. 光照在红色物体表面,反射光的颜色是什么色? 光学知识 彩虹 激光单狭缝的绕射条纹 肥皂泡的彩色条纹&光碟上的色彩分别是什么光学现象请分别注明它们所属的光学类别!我主要想知道 它们分别是什么光学 比如 几何光学 波动光学之类 白色光照在黑色的物体上,反射回来的光是什么颜色的 机械加工工艺中零件的几何误差都包括哪些? 为什么向着太阳吹肥皂泡会显出色彩?为什么有的时候天上会出现彩虹? 急~~~~~~~希望大家帮帮! 被X光辐射了怎么办?我老公周一上班的时候,被附件的X光辐射了,据说单位几十人都被辐射了,现在要求索赔,怎样的索赔方案才好呢?还有是现在去做检查还是等一个月以后去检查呢? 寻汽车橡胶配件加工技术及设备 彩虹是什么颜色
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn