关于C++异常机制的笔记(SEH, try-catch)
昨天晚上加班解决了一个问题,是由于无法正确的捕获到异常导致的。刚开始用try-catch,但是没法捕获到异常;后面改成SEH异常才解决。因此今天将这个问题重新梳理了一遍,关于try-catch, SEH的基本知识,大家可以从MSDN(https://msdn.microsoft.com/en-us/library/4t3saedz(v=vs.100).aspx),或者自行查找亦可。
关于二者之间的使用区别,做了些小小的测试,代码如下(OK-捕获异常、FAILED-未捕获异常):
void JsonTest()
{
char szJson[] = "{\"val\":1}";
Json::Reader reader;
Json::Value root;
if (false == reader.parse(szJson, root, false))
{
DEBUGA(DBG_DEBUG, "return false, JSON parse FAILED.");
return ;
} int val = root["val"].asInt();
string val2 = root["val"].asString();
} void StrTest()
{
wstring strVal = L"a";
strVal.at();
} void NULLPtrTest()
{
int* p = NULL;
*p = ;
} void ZeroTest()
{
int z = ;
double d = / z;
z = ;
} void OutRangeTest()
{
char arr[] = "abc";
char c = arr[];
} void TryCatchTest()
{
try
{
JsonTest(); // OK
StrTest(); // OK
NULLPtrTest(); // FAILED
ZeroTest(); // FAILED
OutRangeTest(); // FAILED
}
catch (...)
{
MessageBox(, L"try-catch", , );
}
} void SEHTest()
{
__try
{
JsonTest(); // OK
StrTest(); // OK
NULLPtrTest(); // OK
ZeroTest(); // OK
OutRangeTest(); // FAILED
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
MessageBox(, L"SEH", , );
}
} int main()
{
TryCatchTest();
SEHTest();
retrun ;
}
关于C++异常机制的笔记(SEH, try-catch)的更多相关文章
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- C++ Primer笔记2_四种类型转换_异常机制
1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式运行的不论什么类型转 ...
- Java笔记 - 异常机制
JAVA异常机制是Java提供的用于处理程序在运行期可能出现的异常事件(如数组下标越界.文件不存在等)的一种机制,使程序不会因为 异常的发生 而 阻断或产生不可预见的结果 .而且还可以将逻辑代码与错误 ...
- Java学习笔记--异常机制
简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...
- [学习笔记]Java异常机制
概述 异常 程序在执行时出现的不正常情况,是对问题的描写叙述.将问题进行对象的封装. Java中的异常,就是对不正常情况进行描写叙述后的对象体现. 异常体系 Throwable |--Erro ...
- .net异常机制
异常机制简介 当CPU运行到一些非法的指令,例如除零错误,访问内存页失败等指令,CPU会生成一个硬件异常,不同的异常有固定的异常代码作为标识符,异常产生以后CPU暂时不能继续执行后续的指令—因为后续的 ...
- mfc 异常机制
异常 抛出异常 捕获异常 一.异常 迄今为止,我们处理程序中的错误一般都是用if语句测试某个表达式,然后处理错误的特定义代码. C++异常机制使用了三个新的关键字 (SEH(结构化异常处理)) try ...
- Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制
Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...
- C++ 异常机制
程序在运行的时候可能产生各种可预料到的异常,例如磁盘不足,内存不足,或是数学运算溢出,数组越界之类的.为了解决这些问题,C++提供了异常处理机制,它一般是由try语句和catch语句构成. 一.try ...
随机推荐
- mac下配置cocos2d-x3.0
今天看到3.0的正式版公布了,就马上荡下来试试3.0,以下记录下环境变量配置过程 打开用户文件夹下.bash_profile文件,配置环境 1.首先配置下android sdk,我的是在opt文件夹下 ...
- 页面布局之BFC 微微有点坑
一.什么是BFC: 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说 ...
- MVC DI
using System;using Microsoft.Practices.Unity; public class BizInstanceFactory { private static reado ...
- mina教程
关于mina介绍这里不做阐述..... 我们先做一个关于mina的helloworld 首先先下载mina包:http://mina.apache.org/ (如果你已经下载,此步骤忽略) 下载下来以 ...
- 搭建zend framework1开发环境
1.和常规开发大致相同,首先下载zend framework1,下载地址如下 http://www.zendframework.com/downloads/latest 挑选其中一个下载,我下载的是f ...
- jbpmAPI-1
1.1. What is jBPM? jBPM是一个灵活的业务流程管理(BPM)套件.它是轻量级的,完全开源Apache许可下(分布式),用Java编写的.它允许您模型.执行和监控业务流程的整个生命周 ...
- mongoDB初接触
首先去官网http://www.mongodb.org/ 下载mongoDB 下载后解压D:\mongodb 创建两个新文件夹data以及log 新建一个文件命名为mongodb.cfg dbpath ...
- SiteMesh
1.导入对SiteMesh.jar的依赖 <dependency> <groupId>org.sitemesh</groupId> <ar ...
- python pythonic是什么?
原文地址:http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0 注:Martijn 是 Zope 领域的专家,他为 Zope 系列产品做了许 ...
- 省部级干部list
省部级干部表 省(市.自治区) 省(市)委书记 省(市)人大主任 省(市)长 省(市)政协主席 北京市 郭金龙 杜德印 王安顺 吉林 天津市 黄兴国 肖怀远 黄兴国 臧献甫 上海市 韩正 殷一璀(女) ...