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

关于 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,其他童鞋是不是也有这种情况?

 

 

remove(expr)-JQuery API wrap(elem)-JQuery API wrap(html) -JQuery API add(elements) -JQuery API add(html)-JQuery API add(expr) -JQuery API children(expr) -JQuery API contains(str) -JQuery API end() -JQuery API filter(filter) -JQuery API filter(expression) -JQuery API find(expr) -JQuery API is(expr) -JQuery API next(expr)-JQuery API not(elems)-JQuery API not(expr)-JQuery API not(el)-JQuery API parent(expr)-JQuery API parents(expr)-JQuery API prev(expr)-JQuery API siblings(expr)-JQuery API Events事件-JQuery API bind(type,data,fn)-JQuery API blur(fn) -JQuery API blur() -JQuery API change(fn) -JQuery API click(fn)-JQuery API click()-JQuery API dblclick(fn) -JQuery API error(fn) -JQuery API focus(fn)-JQuery API 怎么把linux下的图形转移到window 2000下(请大家帮忙!急用!!谢谢!!!) 树?? 请问哪儿有acrobat下载?不是acrobat reader. 一个窗口,可以改变大小,但宽度高度只能在一个范围内,比如宽的范围是u-v,高的范围是x-y,超过范围就不能再改变,怎么做? 小问题,如何解决?谢谢各位大虾!!谢谢,我在线等 要上次网络程序员的试题。 sanfen 为什么我的字总是看着上下都缺一点? 死阿猫,老博亦,跑那去了,赶快看看我的问题~~~~~ 错在哪里?提示“标准表达式数据类型不匹配” 记得原来WIN95下有个快速查看的软件,2000下找不到了,请大家指点指点 快救我一下 急1! 怎么在DBGRID中实现下拉框??在线等待高手!!! 请问一个在安装WIN2000时的问题 delphi 编程时,如何把memo中字符的“回车”去掉! 如何在串口通讯中读写中文? 有没有誰知道哪个网站现场直播世界杯的. Query的查询 有关DDX的问题,高手请帮忙 用过NUCLEUS GRAFIXWT 和GRAFIXGS的朋友请进 about windows media player? 请问哪里有outlook express60的安装程序下载? socket通讯的问题! winxp的桌面图表问题 软件工程预算,急急急!!!!! 程序员教材的错误。 ADO简单问题求教,解决问题立即送分,绝不食言! 对于您来说可能很简单的日期问题,对于我很重要! 哈哈,阿猫现在不在,有想骂他的赶紧进了啊,我先来一句:死阿猫。。。。。 请大家说说这个小偷是不是很有义气呀! 猪猪要退出水园了,强烈挽留猪猪继续当我们的版主!支持的进来签名 着急!! 我是菜鸟 如何在sdk程序中获得.lnk文件的icon? 我在FORM1上加上了数据模块,FROM1上有一个DBedit控件,为什么Datasure属性里却没有 我是菜鸟 着急!! VC开发如何OFFIC,关于WORD的? 新手请教:如何从一张表中取出最新的50条数据? 硬盘抢救!!!大家帮忙! 国外有没有类似http://bbs.51soft.com/的大的软件讨论站? 格式化字符串的问题 菜鸟 Combobox中如何设置默认值? 如果你是新手! [流氓兄:突然冒出很多新人。。。贴] 请转这里 菜鸟 一个有难度的问题 关于格式化字符串的问题。。。 MYSQL权限与mysql库里的所有表问题~!~!请指教! Installshield中怎样调用MSI文件,并能执行MSI文件 进入锅炉的空气为什么加热 苯酚上醛基和氢气加成吗苯酚上有醛基和氢气加成,得到的产物为什么只有醛基还原,而苯环没有被还原? 能使湿润的淀粉碘化钾变蓝的气体有什么? 物理桥梁? 为何溶液的熔点、沸点与纯净物相比会产生变化?(初中生,请深入浅出地详细讲解一下,谢谢!)比如,一标准大气压下,水的熔点是0摄氏度,而盐水的熔点低于0摄氏度;水的沸点是100摄氏度 碘化钾能使湿润的淀粉碘化钾试纸变蓝吗 桥与物理求一篇有关于天津的桥的文章,要桥的物理方面的知识,如结构、材质、承重力~~~等等~越详细越好像天津的金刚桥、北安桥等等 除尘脱硫系统进口、出口烟气流速 脱硫塔内烟气流速 为什么对流层的厚度随纬度增加而逐渐降低? 桥梁中涉及的物理知识 发现脱硫进口烟尘超标时,除尘系统应如何调整? 对流层为什么随纬度的增高而降低 物理学方面研究桥结合生活中的桥从物理学角度来研究一下结构;1桥的技术参数2桥的主要承重构件3桥身设计的力学原理4桥的材料要求马上就要开学了 望大虾们帮助. 可见光中哪些波长的光经过玻璃片透射后的到加强.白光垂直入射玻璃片,玻璃片折射率1.5 厚度0.4um. 对流层的厚度在不同纬度是否相同?为什么? 地球为什么有大气层 两瓶无色溶液,一瓶是0.1mol/L的硫酸,一瓶是0.2mol/L的硫酸现有试管,胶头滴管,量筒等仪器,下列试剂无法用于鉴别的是1.PH试纸2.0.1mol/L的硫代硫酸钠溶液3.两根粗细均匀的镁条4.0.1mol/L的偏铝酸钠 15、目前人类大量利用的淡水资源是:( ) A地下水、河流水 B江河湖泊和地下水C冰川和湖泊水D海洋水和冰雪融 为什么地球有大气层的呢‘’ 1.沸腾观察到的现象是:水中形成___,上升时____,到水面_____,里面的水蒸气散发到空气中.2.____和_____是使气体液化的两种方法,液化汽油是利用______的方法实现的.3.人被100℃的水蒸汽烫伤比100℃ 对流层高度随纬度增加而降低,这是因为? 为什么地球周围有大气层 水沸腾时,大量气泡上升、( ),到水面破裂里面的水蒸气散发到空气中. 四时田园杂兴描绘了什么景象 声音在土壤中的传播速度是多少?我需要的是大致的答案,环境就是森林里面的土壤。因为,含糊不清的答案会让人感觉没有说服力。 苯酚+氢气化学方程式我要化学方程式或者是反应后苯环的集团是什么也成? 什么蚊香能把苍蝇熏死?这两天房间里到处都是苍蝇,开窗子轰不出去,外面的苍蝇更多有没有一种蚊香能把苍蝇熏死毒性又不大的? 这是不是水滴鱼啊 苯酚和氢气反应 过程 求高手回答 蚊香能驱苍蝇吗?怎么驱苍蝇呢? 实验室配制1mol/L的稀硫酸250ml,需要18.4mol/L的浓硫酸多少ml 为什么要学比热容? 四时田园杂兴诗 古诗二首 分别描写的是什么景色 萘环能和氢气加成么?如果可以的话?1摩尔萘环能和几摩尔氢气加成? 桥梁结构的力学计算以什么为准a.净跨径 i.; b.标准跨径 Lκ; c.总跨径; d计算跨径 i 比热容计算 为什么要乘80%? 浓硫酸加入足量铜并加热被还原的硫酸的物质的量的范围是多少A.小于0.9mol B大于0.45mol小于0.9mol 物理课要设计一个桥,关于力学,物理课要设计一个桥,用面条(通心粉类似的),桥的长度为75厘米,桥最高的地方只能10cm,宽度至少要求8cm,请问设计一个中间为10cm的桥,两端的高度为多少厘米合 在4份碘化钾淀粉溶液中,分别加入下列物质,能使溶液变蓝的是A.氯化氢B.溴水C.氯气D.溴化钠溶液请说明理由 某大桥全长6.89km……[一道物理题]【急!】某大桥全长6.89km,江面上正桥长为1570m,一列长为110m的火车匀速行驶,通过江面正桥需要120s,求:(1)火车的速度是多少m/s?(2)火车通过全桥需要用的时间 扬州或者南京有卖 中学奥林匹克竞赛物理教程力学篇 的书店么?本人高一、物竞入门、听人推荐这本说比较好、但市面上已经绝迹了?另外还有哪些书比较基础什么的、因为高中课内未学完、 为什么纬度越低,太阳高度角越大? 一条物理题(关于火车过大桥的)一列总长度为200米的火车以15米/秒的速度完全通过一座大桥所需时间为2分钟 求(1)大桥的长度(2)这列火车全部在桥上行驶的时间 土木工程中力学的作用是什么,结构的作用是什么?力学和结构之间有什么紧密联系? 纬度越高气压越低吗 一座大桥高20米……一道物理题一座大桥高20米,一辆6吨的汽车匀速行驶在长1000米的引桥上,行驶中除重力意外的阻力为汽车重的0.06倍(g取10牛/千克)求:(1)发动机的牵引力;(2)若汽车的速度 0.3molcu和含0.7molH2SO4的浓硫酸共热,充分反应后,未被还原的H2SO4物质的量 四年级上册语文园地七的作文什么写要350字 吸热本领最强的是( )物体.深色物体比浅色物体吸热快.表面粗糙的比光滑的吸热快 在足量的浓硫酸中加入1.92g铜粉加热得到SO2 448ml求被还原的H2SO4的物质的量 小学四年级上册语文园地一赭山公园写作文(400字) 一个西瓜10斤,一个人120斤,一个人吃了这个10斤的西瓜,剩下5斤西瓜皮,请问这个人现在有几斤? 浓硫酸与锌反应,若反应过程中锌与H2so4质量比是26:49,则还原产物是什麽 滨海小区向一个长50米,宽25米,深1.8米的空游泳池里注水.经过0.6小时水深达0.2米,这样的话,几小时能把这个游泳池注满 爱吃西瓜的人的性格是什么样的? 在沙子和水的实验中为何不考滤比热容?在沙子和水的实验中,有一句话说,相同的质量水和沙子,加热条件相同,相同的时间,吸收热量相同,为何不考滤比热容呢?公式不是Q吸=Cm(t-t0)吗,也就是说沙 蚊香怎么熏不死蚊子病情描述(发病时间、主要症状等):现在的蚊子是不是基因突变了,不怕蚊香,杀虫剂也冒得作用 本人 家住的 房子是一楼很潮湿,蚊子 每天没有停止过,灭不了啊.罩蚊帐晚 将过量铁粉放入300ml 2mol的浓硫酸中,假设浓硫酸完全反应且全部还原为SO2,则参加反应的Fe的质量为?需要完整过程. 水和沙子谁的导热性好 注意:不是比热容! 蚊香为什么熏不死蚊子
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘