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

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

 

 

MDB文件的导出(使用DAO)-VB资料 PaintPicture的和法 -VB资料 Shell &amp; Wait 的程序怎么写? -VB资料 SHELL语句用法心得-VB资料 VarPtr、StrPtr和ObjPtr函数的用法-VB资料 VB 在ACADWIN中的使用 VB5.0应用程序的启动与退出设计 VB5如何取得CDROM的盘符? VB5三十六计 VB5中确定CPU类型 Vb6.0编程技巧四则 VB6二进制双通道技术实战经典 VB6内置的内码转换功能 VB编程步步高-代码效率篇(一) VB编程步步高-杂类篇(二) VB编程步步高-杂类篇(一) VB编程的必备技巧 VB编程的一些心得 VB编程技巧几例 VB编程经验点滴 VB编程俱乐部问答 VB编程如何控制I/O口 VB编程问与答 VB编程之提速攻略(二) VB编程之提速攻略(三) Windows/VB编程逐月通 VB编写键盘拦截程序 VB常见问题解答(1) VB程序中处理随机事件 VB的多媒体控件VBPLAY.VBX简介 VB技巧点滴 有关显示器问题. apache2与tomcat连用时显示图片的问题 流水线中的“瓶颈”问题及消除方法 在对话框属性里去掉title bar后发现不能拖动对话框了,怎么解决呀? 紧急:oracle安装问题 关于jbulider7的问题!(给100分) delphi查询问题(急) 请教:ciscoworks2000问题 进来看看吧! 各大虾:请问如何实现物体移动无闪烁. 如何取得用户使用保存对话框中的文件过滤项目? 第一次用VC编数据库,大家提个建议。 在Win2000中对NTSF格式文件加密后重装了系统(2000),就大不开文件了? 怎样用ASP去动态操作DNS,并生效 怎么样在对话框上画一个空的距形|? 不能添加记录的错误 在线等候vs.net2003 enterprise architect 2003 e文版安装问题。 请问一个 应用程序登陆SQl Server 时密码的问题? 关于数据表格的问题! 请教DOS与WIN2000 Profesional 组网问题 网卡设置问题 编辑框中如何限制只能输入一个特定的数字? 动态创建的VCL 为什么看不到? 那位老大能给个VB.NET和SQL结合的例子??? 程序员难到都感情不顺???? IE WebControls 哪里下载? 高分求书--1000 请问谁有The Design Patterns (Java Company)的程序代码? 请问有关于uml建模实例分析的好书吗? 我想下载一个好用的Webform TreeView 控件怎么办? 请帮帮忙吧! 处理字符串以修改数据库 我在恢复备份的时候怎么会这样? 关于SQL*Plus——请大虾指点,//bow 用Hashtable class怎么定义表上限? 如何在不想安装MSSQL的仅连接或客户端连接来连连接数服务器?? 问一下连接paradox数据库的问题 闷郁..散分100. 菜鸟请教!!急 今天因为一个已结帖的帖子结识一个好友rocksoft,为了表示庆祝特地散分!请斑竹放行! 闷郁~散分 c++中的friend关键字在c#中有没有什么替代的 请问IMG中的ALT属性的意义和作用 float型的问题(在线等待) 关于AnsiString类别字符串传送至PB8 ☆☆内存泄漏的检测问题★★ i installed an english system, but it doesn't surport chinese input, and many words are displayed incorrectly,how to do with it 有兴趣的可以看看,测一下自己的水平,我公司的Oracle试题一? 代理服务器XP上安装了两块网卡,上网如何设置? 请教使用CFile类的一个小问题? 编辑框简单问题 请问那里有RFC下? 延长氯化亚锡水溶液的使用寿命本人自己调配了一种含量是氯化亚锡2.5%,盐酸0.5%,去离子水97%,的水溶液,主要是起到表面润湿作用,效果也可以,但唯一的缺点就是使用寿命太短,现在用的最多是 用量筒读数 俯视读数与仰视度数哪个比原来大 哪个比原来小? 高压锅刚离炉不易打开 用冷水冷却易打为什么? “对于机械波,所有横波的波速在同种介质均相等,所有纵波的波速在同种介质均相等.”这句话对吗? 最近的新闻, 列表比较昆虫、两栖动物和鸟类的生殖和发育方式,并简要分析不同生殖方式对环境的适应性.此问题于八年级下册生物书P20--4见 一般弹性杆件的纵波波速为3000m/s等时,它的波长为? 给我20条简短的最近的时事政治新闻,啊谢谢拜托了各位 谢谢 板式换热器进水口和出水口接错会怎样 办换上进出水口接错会怎样 84消毒液和汗液的化学反应偶然在单位清洗白大褂滴84消毒液的时候发现有汗渍的地方都变成了粉红色,汗渍接触越多的部位如衣领袖口颜色会越深,其他没有接触到的地方则没有反应,一分钟左 最近的新闻(短一点的) 下列高等动物激素中,可以直接口服的是A.甲状腺激素B.胰岛素C.生长激素D.性激素请讲出原因.甲状腺激素是氨基酸衍生物胰岛素是蛋白质生长激素是蛋白质性激素是类固醇 请问“所有的横波在相同的介质中波速都一样,所有的纵波在相同的介质中波速都一样”这句话对吗以上波为机械波 为什么表面积大的粒子(物质)吸附能力就强呢 人吃了添加动物激素的家畜会怎样(注名报道来源, 岩土 地球物探 波速 请问花岗岩新鲜波速(纵波)? 为什么比表面积面大,吸附能力就大 动作电位钠离子内流后为什么不再流出流进神经纤维的钠离子去哪里了?是不是神经纤维中本身有钾离子把动作电位时流进的钠离子置换成钠原子后变成钾离子,然后等恢复静息电位时再流出 纵波在传播过程中,虽然波速在不断变化,但穿过了地球内部所有的层面.说明纵波可以在?和气体中传播 请问如何降低界面的表面能?比表面积与吸附能力有什么关系吗? 求有关自我保护学会生存的名言! 醋是由什么组成的拜托了各位 谢谢 俯视和仰视量筒度数哪个大,哪个小? 有句话是捧在手心里怕...晗在口里怕化了,中间是什么我忘记了谁能告诉我这句话全的是什么 细胞壁 细胞膜 细胞器 细胞核 细胞质之间的关系 初三化学关于误差的分析.仰视和俯视的.仰视时实际体积比度数大的实际体积指什么? 捧在掌心怕碰、含在口里怕化是什么意思 电机在正常转动时,装上皮带就不转了,这是怎么回事?因为这个电机平时一直在用的,今天就不动了,卸下皮带就能转,装上就不转了。.. 有关CO的化学方程式?和CuO的反应 有一对夫妇晚年得子,十分高兴,把儿子视为掌上明珠,捧在手上怕飞,含在口里怕化,什么事都不让他干,儿子长大以后连基本的生活也不能自理.一天,夫妇要出远门,伯儿子饿死,于是想了一个办法 磁带忽然不转了,若原因是绞带该怎么办,若原因是电机皮带脱落该怎么办1.磁带忽然不转了,若原因是绞带,你该怎么办?若原因是电机皮带脱落,你该怎么办?2.磁带转动却没有声音,若原因是磁带 证明有co的有关化学方程式 学会生存 名人名言 醋元素化妆品怎么样 在看温度计时,俯视、正视、仰视的大小关系如何?说明理由?急 一点儿都不能动弹了,只剩下口里在喘粗气用个词语形容 金属软管能否用在消防管上在喷淋引下管的地方,我想在连接喷淋头的地方采用金属高压软管连接,金属高压软管长度为50CM,不知道是否可以这样做?如果可以做具体是参照哪条标准,请达人指教. 八年级下册生物题:求解……速霉素刚制造出来时,能杀死多种致病的细菌,是人们治病的良药,但由于人们使用青霉素过多,使得有些细菌不再受青霉素影响了.请分析这一现象. 以金红石为原料生产金属钛的步骤有 1在高温下,向金红石与焦炭的混合物中通入Cl2,得到TlCl4和一种可燃性1在高温下,向金红石与焦炭的混合物中通入Cl2,得到TlCl4和一种可燃性气体,2在稀有气体 醋口感酸性 为什么里面会含有钾,钙,钠等碱性元素 20.1988年上海市流行甲型肝炎,后查明是食用不清洁的毛蚶引起的,这种毛蚶成了甲型肝炎流行的( )A.传染源 B.传播途径 C.易感人群 D.病原体20.医生让甲型H1N1的病人在传染病医院治疗 形容一个人很戏剧化是什么意思? 醋中含有什么酸 若一个人得了流感,传染给了班里的四名同学;那么的流感的人叫“传染源”,四个被传染的人叫什么?不是说“对于某种疾病缺乏免疫力容易感染该病的人”才叫做“易感人群”吗?他们已经被 TiO2和焦炭的化合物通入Cl2 摄像头上哪种金属软管,可以随便固定造型的是叫啥管啊? 浓缩型的洗洁精好用吗 怎样兑水呢 金红石 现有一个金红石矿产,TiO2的含量在2%左右.想问一下是否值得开采?还有现在金红石TiO2现有一个金红石矿产,TiO2的含量在2%左右.想问一下是否值得开采?还有现在金红石TiO2的价格 普里卡管是不是就是金属软管 浓缩型的洗洁精一定要兑水使用吗 悬壶济世怎么解释啊? 光波和声波都是波,这两种波本质上一样?还有未知的波?人类的技术能否任意制造各种不同波长波速的波? .使高压锅冷却,下列方法中冷却最快且叙述正确的是( )A.自然冷却,通过热传递使本身内能减少 B.浸在冷水中,通过热传递使它的内能减少C.用冷水淋锅,对外做功使它的内能减少 D.用 请问悬壶济世指的是谁 水泥比表面积实验是不是每次都需要测s值 用达尔文的自然选择学说的观点判断,下列叙述正确的是:( )A 长颈鹿经常努力伸长颈去吃树上的叶子,因此颈变得很长B 北极熊生活在冰天雪地的环境里,它们的身体就产生了白色变异C 野兔 一定质量的NaCO3和NaHCO3混合物跟足量的盐酸反应,共消耗HCl0.8mol 一定质量的NaCO 紫外线是什么颜色的? 某同学做用天平称量物体实验时 由于失误 将砝码放在了左盘 被测物体放在了右盘 当天平平衡时 左盘砝码质量为30克 游标卡尺上示数为0.5克 铁块物体质量为多少/? 如果想要使高压锅冷却,下列方法中冷却最快且叙述正确的是( )A.自然冷却,通过热传递使本身内能减少B.浸在冷水中,通过热传递使它的内能减少C.用冷水淋锅,对外做功使它的内能减少 国资改革方案或尽快出台 国企分类监管前3季度物流运行稳中向好 四大瓶颈亟宁波警方便衣蹲点 打掉跨省假发票大案机构预测10月CPI同比涨3.3% 非制造业PMI创新高 有望延续趋稳向郑州皇家一号涉黄被查 号称“中原第一国资委:地方国企效益下滑 仍盲目铺摊亚裔模特因人体彩绘爆红全球 海量性感奥巴马参加弗吉尼亚州长造势演讲 表情美秘密打造人类最快飞机 导弹将无法拦陈毅之子:反思文革是必要的 但不赞成郑州“皇家一号”夜总会涉黄被查 15婴儿注射疫苗险丧命 “疫苗后遗症”家国资改革方案或尽快出台 国企分类监管穆尔西庭审前夕 埃及发生枪击案致2名印度一名女婴患家传怪病 身体多毛酷似华尔街日报竟称钓鱼岛属日本 呼吁奥巴俄日会不会结盟 联手遏制中国?刘翔身穿红军服参加备战里约奥运会动员郑州皇家一号涉黄被查 号称“中原第一遇火灾女孩撬门救人 反被死死拽住拖进自己包粽子 端午味更浓明天跟中医 学八段锦识中药材西电“最牛班”31人全读研再不赶紧保护 方言怕就消失了美加州大学洛杉矶分校枪击案两人死亡全球最长铁路隧道正式通车人道物资4年来首次进入叙利亚一“围城全球最长铁路隧道在瑞士通车 总长57市民怎样看待“取消药品加成首日”?有马里维和部队遇袭事件一名中国伤员抵达朝鲜儿童欢度“六一”国际儿童节(高清乌克兰问题三方联络小组会谈未达成任何暴雨蓝色预警发布:重庆、贵州等地有大刘晓庆再演《武则天》小震不坏 中震可修 大震不倒每一次挫折,都会种下坚韧的种子扬州核心旅游区 扩至邵伯湖苏宁换帅?何妨多一点耐心“营改增”首日纳税运行平稳政协工作 调研座谈会举行“德企之乡”再启对德合作新篇章
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘