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 异常列表 ...
随机推荐
- Android 新老两代 Camera API 大起底
https://blog.csdn.net/Byeweiyang/article/details/80515192 0.背景简介 最近有一部分相机相关的需求,专注于对拍摄的照片.视频的噪点.色温.明暗 ...
- camera按键采集图像及waitKey的用法(转)
源: camera按键采集图像及waitKey的用法
- django变量使用-在模板中使用视图函数中的变量
DTL语言,即django template language 第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DI ...
- Mac配置java运行环境的步骤
官网下载地址:jdk1.8版本的 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...
- Django Form&ModelForm
ModelForm: 首先导入所需模块 from django.forms import ModelFormfrom django.forms import widgets as form_widge ...
- jbpm 6 vs activities 5评估(持续更新、亲测实际项目评估)
最近我们有个使用了jbpm 6.2(6.2是一个较大的里程碑)的批处理模块,因为大BOSS一直觉得太重了,希望有更加轻量级的解决方案,因为我们基本上没有真正意义上流程的概念,只有静态的流程图,因为一直 ...
- j2ee分布式缓存同步实现方案dlcache
现成的分布式K/V缓存已经有很多的实现,最主要的比如redis,memcached,couchbase.那为什么我们还要自己去实现呢,在我们解决了分布式系统下大量rpc调用导致的高延时后,我们发现很多 ...
- 01:tcp/ip基本知识
1.1 tcp常识 1.网络七层 2.TCP三层握手 ####1.第一次握手 # 建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认 ...
- MongoDB入门一
一.环境配置 1.下载MongoDB,找到Bin目录下所有的.exe文件,拷贝到G盘MongoDB(新建)下,在MongoDB下建一个data文件,用于存放数据,创建一个logs文件夹,文件夹下创建一 ...
- 判断一个点是否在RotatedRect中
openCV函数pointPolygonTest(): C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measur ...