VC异常.简单抛,简单捕获
1、ZC:始终没有找到,能像Delphi7里面那样能抛 字符串描述 的异常信息。(难道Delphi是这样做的?:在程序的最外围 套了一层异常捕获,然后在获取到异常之后,自己再将异常信息弹出来,我们写的字符串信息 可以通过 _EXCEPTION_RECORD.ExceptionInformation来保存)[ 下面有我的猜测Delphi7中的做法 ]
ZC:这里就 使用 异常Code 来区分异常吧。本来想使用 0xFFFF???? 来表示 我的异常Code的,但是 实际运行发现 跑出来的异常代码变成了 0xEFFF????,于是改为使用 0xCCCC????,这个看了一下 没有变化...
2、简单 抛异常 WindowsAPI:
RaiseException(
__in DWORD dwExceptionCode,
__in DWORD dwExceptionFlags,
__in DWORD nNumberOfArguments,
__in_ecount_opt(nNumberOfArguments) CONST ULONG_PTR *lpArguments
);
2.1、我的抛异常使用:RaiseException(0xCCCC????, EXCEPTION_NONCONTINUABLE, 0, NULL);
ZC:第二个参数 如果不是EXCEPTION_NONCONTINUABLE,而是 0 的话 表示(exe)可以继续执行
2.2、我的捕获异常的使用:
void main()
{
__try
{
RaiseException(0xCCCC0001, EXCEPTION_NONCONTINUABLE, , NULL);
}
__except( ExceptionFilterZ( "main(...)", GetExceptionCode() ) )
{
printf("Catch an exception\n");
} printf("main() out.\n");
system("pause");
}
long WINAPI ExceptionFilterZ(char* _pcFuncName, DWORD _dwExceptionCode)
{
//return (_dwExceptionCode == STATUS_STACK_OVERFLOW) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; printf_s("==> ==> ==> %s catch exception , _dwExceptionCode : %d(0x%08X)\n",
_pcFuncName, _dwExceptionCode, _dwExceptionCode); return EXCEPTION_EXECUTE_HANDLER; //#define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L)
//STATUS_STACK_OVERFLOW
}
3、我猜 Delphi7中可能是这样做的:
通过 struct _EXCEPTION_POINTERS 保存程序员输入的 字符串信息,在异常发生时 再将它取出来显示
3.1、测试代码:
long WINAPI ExceptionFilterFunc(char* _pcFuncName, struct _EXCEPTION_POINTERS *_exception_info)
{
//return (_dwExceptionCode == STATUS_STACK_OVERFLOW) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; DWORD dwExceptionCode = _exception_info->ExceptionRecord->ExceptionCode;
printf_s("==> ==> ==> Catch exception !!! Func name :%s, _dwExceptionCode : %d(0x%08X)\n",
_pcFuncName, dwExceptionCode, dwExceptionCode); DWORD dwNumberParameters = _exception_info->ExceptionRecord->NumberParameters;
printf("\t NumberParameters :%d\n", dwNumberParameters);
if (dwNumberParameters == )
{
ULONG_PTR ulp = _exception_info->ExceptionRecord->ExceptionInformation[];
char* pc = (char*)ulp;
printf("\t Information :%s\n", pc);
delete[] pc;
} return EXCEPTION_EXECUTE_HANDLER; //#define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L)
//STATUS_STACK_OVERFLOW
} void main()
{
__try
{
char* pcMsg = "zc test exception msg .";
char* pc = new char[strlen(pcMsg) + ];
pc[strlen(pcMsg)] = '\0';
memcpy(&pc[], &pcMsg[], strlen(pcMsg));
ULONG_PTR ulps[EXCEPTION_MAXIMUM_PARAMETERS] = {};
ulps[] = (ULONG_PTR)pc;
RaiseException(0xCCCC0001, EXCEPTION_NONCONTINUABLE, , &ulps[]); //GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
}
__except( ExceptionFilterFunc( "main(...)", GetExceptionInformation() ) )
{
printf("Catch an exception\n");
} printf("main() out.\n");
system("pause");
}
4、
5、
VC异常.简单抛,简单捕获的更多相关文章
- Java异常与异常处理简单使用
异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...
- C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法
对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...
- java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误
/** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...
- java 自己定义异常,记录日志简单说明!留着以后真接复制
log4j 相关配制说明:http://blog.csdn.net/liangrui1988/article/details/17435139 自己定义异常 package org.rui.Excep ...
- C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全
前言: C++的异常处理机制是用于将运行时错误检测和错误处理功能分离的一 种机制(符合高内聚低耦合的软件工程设计要求), 这里主要总结一下C++异常处理的基础知识, 包括基本的如何引发异常(使用th ...
- miniSipServer简单而不简单,轻松落地,实现电脑对固话、手机通讯
最近沉迷于SIP通讯,网内通讯全免费,落地也就几分钱,而且无漫游全国拨打,想想真是心动呢,只要有网落就ok!. 对于sipserver,现在的市场上软件很多,免费的.收费的应有尽有,这里不一一例举.综 ...
- php异常及错误信息捕获并记录日志实现方法全解析
php异常处理 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法.异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码 ...
- springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能
转自:https://blog.csdn.net/thinkingcao/article/details/52472252 C 所用到的jar包 数据库表 数据库表就不用教大家了,一张表,很简 ...
- java中异常的抛出:throw throws
java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...
随机推荐
- GC Root 对象有哪些
(1)虚拟机(JVM)栈中引用对象 (2)方法区中的类静态属性引用对象 (3)方法区中常量引用的对象(final 的常量值) (4)本地方法栈JNI的引用对象
- 对gulp的理解和使用(一)
说的gulp,到底是什么?用来做什么的? 以前并没有想过这个问题,拿到公司的项目脚手架就开始做事情了.现在专门来总结一下. gulp干什么的呢? gulp是node中的一种代码构建工具,还有就是项目自 ...
- 【新架构测试】Fiddler转发数据测试
跨域转发设置: 首先进行设置, AutoResponder--> 选中Enable rules和Unmatched requests passthrough 然后Import...导入fiddl ...
- 使用sqlalchemy用orm方式写pipeline将scrapy item快速存入 MySQL
传统的使用scrapy爬下来的数据存入mysql,用的是在pipeline里用pymysql存入数据库, 这种方法需要写sql语句,如果item字段数量非常多的 情况下,编写起来会造成很大的麻烦. 我 ...
- daemon进程fork一次和fork两次的区别?
守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊的进程.它独立于控制终端并且周期性的执行某种任务负等待处理某些发生的事件.因为他们没有控制终端,所以说他们是在后台运行的. 守护进程的特点 ...
- win7改装 CentOS7,装完后开机,没有引导
本来系统是win7,安装centos是用U盘启动安装方式安装成功后,发现win7的系统引导不见了.之前用的是centos6.4安装后依然保留win7引导的,到centos7就不行了 解决方法1.使用r ...
- Static变量与代码块
* static:是一个关键字,用于修饰成员变量和成员方法 * static的特点: * 被所有的对象所共享 * 可以使用类名调用 * 静态的加载优先于对象 * 随着类的加载而加载 * static的 ...
- bzoj 2091 The Minima Game - 动态规划 - 博弈论
题目传送门 需要验证权限的传送门 题目大意 Alice和Bob轮流取$n$个正整数,Alice先进行操作.每次每人可以取任意多的数,得分是这一次取的所有数中的最小值.Alice和Bob都足够聪明,他们 ...
- 一道cf水题
题意:输入数字n表示字符串中元素个数,字符串中只含有RGB三个字符,现在要求任意两个相同的字符他们的下标之差能整除3. 思路:任意两个相同的字符的下标能整除3,也就是任意三个为一组的字符串当中的字符不 ...
- 从0开始安装fedora23的笔记-- 以及使用fedora的常规问题-3
关于sys的目录有: /etc/sys/, 和 /proc/sys fedora的桌面背景图片默认的在: /usr/share/backgrounds/, 里面有f23, gnome, images等 ...