由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++ try {} catch(...){} 能扑捉一切异常吗?
相关主题
大家对 exception 都是怎么处理的?Java的例外处理问题什么情况下不用写throws
真是痛恨喜欢 throw 的猪出一道C++题
为什么用try catch不住exception?弱问:c++里面throw就相当于return了吧?
Windows XP与Multithreading ProgrammingC++ 的 exception handling
有必要学一学MFC吗?C++的exception大家常用吗?
c++:exception 一问请问一个visual studio的菜鸟问题
try catch questionC++ string类输入数据的问题
Exception 问题求助Recommend a C++ IDE?
相关话题的讨论汇总
话题: c++话题: catch话题: exception话题: throw话题: seh
进入Programming版参与讨论
1 (共1页)
N******K
发帖数: 10202
1
在vs debug下
try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉
是vs的问题 还是catch(...)的问题?
m*******l
发帖数: 12782
2
换release看看

【在 N******K 的大作中提到】
: 在vs debug下
: try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉
: 是vs的问题 还是catch(...)的问题?

f*******t
发帖数: 7549
3
不能
N******K
发帖数: 10202
4
为什么?
java是不是可以?

【在 f*******t 的大作中提到】
: 不能
p***o
发帖数: 1252
5
Those are generated by the OS, e.g. SEH on Windows and signals on Linux.

【在 N******K 的大作中提到】
: 为什么?
: java是不是可以?

t***t
发帖数: 6066
6
your java program also can't catch the exception/error which causes the jvm
to crash.

【在 N******K 的大作中提到】
: 为什么?
: java是不是可以?

m*******l
发帖数: 12782
7
指针操纵这个绝对应该是可以catch的

【在 N******K 的大作中提到】
: 为什么?
: java是不是可以?

b***i
发帖数: 3043
8
Exception不是给你处理编程错误的。指针非法操作是编程错误,最终会在发行版消失
的,或者变少。而exception是预计要发生的异常。Exception的目的是,在出问题的时
候,无法给出函数返回值的时候,提供一个另外的返回方式和返回值.
比如,计算开方。参数为负,算不出来开方,而函数的返回值是double,怎么办?扔出
一个Exception。这样被最近的catch接到,从而不走正常的返回通道。这种情况下,本
来正常通道就凑不通。这样简化了函数调用都要通过某个参数(指针所指向的结构)判
断一个任务是否完成。本来都要进行if, else if这样。改成try catch 就清晰了。方
便在你可以越级返回,即不在本次调用进行catch,而是在外层catch,比如一个类有很
多子类,就不用在每个子类实现的续函数中catch,而是在呼叫这些虚函数的那个函数
里面catch。
try{
p->virtualfun();
}catch(MyException e){
// no need to implement the catch in different virtualfuns, implement one
catch here
}

【在 N******K 的大作中提到】
: 在vs debug下
: try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉
: 是vs的问题 还是catch(...)的问题?

N******K
发帖数: 10202
9
在计算领域 除以0 给负数开方 都不是错
1/0=inf 0/0=nan
sqrt(-1)=i

【在 b***i 的大作中提到】
: Exception不是给你处理编程错误的。指针非法操作是编程错误,最终会在发行版消失
: 的,或者变少。而exception是预计要发生的异常。Exception的目的是,在出问题的时
: 候,无法给出函数返回值的时候,提供一个另外的返回方式和返回值.
: 比如,计算开方。参数为负,算不出来开方,而函数的返回值是double,怎么办?扔出
: 一个Exception。这样被最近的catch接到,从而不走正常的返回通道。这种情况下,本
: 来正常通道就凑不通。这样简化了函数调用都要通过某个参数(指针所指向的结构)判
: 断一个任务是否完成。本来都要进行if, else if这样。改成try catch 就清晰了。方
: 便在你可以越级返回,即不在本次调用进行catch,而是在外层catch,比如一个类有很
: 多子类,就不用在每个子类实现的续函数中catch,而是在呼叫这些虚函数的那个函数
: 里面catch。

b***i
发帖数: 3043
10
数值计算就不需要try了,直接算不就行了

【在 N******K 的大作中提到】
: 在计算领域 除以0 给负数开方 都不是错
: 1/0=inf 0/0=nan
: sqrt(-1)=i

相关主题
c++:exception 一问Java的例外处理问题什么情况下不用写throws
try catch question出一道C++题
Exception 问题求助弱问:c++里面throw就相当于return了吧?
进入Programming版参与讨论
c******y
发帖数: 29
11
请问如果用java怎么做到这个?1/0直接就exception了,假设一定要用primitive
types: int, double

【在 N******K 的大作中提到】
: 在计算领域 除以0 给负数开方 都不是错
: 1/0=inf 0/0=nan
: sqrt(-1)=i

m*******l
发帖数: 12782
12
catch and deal with it by yourself ?

【在 c******y 的大作中提到】
: 请问如果用java怎么做到这个?1/0直接就exception了,假设一定要用primitive
: types: int, double

t****t
发帖数: 6806
13
1.0/0==inf. 1/0 is div by 0 error.

【在 N******K 的大作中提到】
: 在计算领域 除以0 给负数开方 都不是错
: 1/0=inf 0/0=nan
: sqrt(-1)=i

t****t
发帖数: 6806
14
not in c++. all catchable exception in c++ is generated by throw.

【在 m*******l 的大作中提到】
: catch and deal with it by yourself ?
N******K
发帖数: 10202
15
具体是这样
p=new object
delete p
try
{
p->somefunction()
}
catch(...)
{}
然后程序崩掉

【在 m*******l 的大作中提到】
: catch and deal with it by yourself ?
t****t
发帖数: 6806
16
told you, all c++ exception are generated by throw. if not, catch won't help.

【在 N******K 的大作中提到】
: 具体是这样
: p=new object
: delete p
: try
: {
: p->somefunction()
: }
: catch(...)
: {}
: 然后程序崩掉

l*********s
发帖数: 5409
17
not everything can be caught: segfault is a famous example.
c*****z
发帖数: 171
18
非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了.
b***i
发帖数: 3043
19
和thrust讲的类似,其实java也是一样。Exception本质是让你自己写函数的时候主动
throw,让你自己呼叫这个函数的时候try, catch,实现另一种返回方式的。函数里面
,需要自己判断条件是否需要throw。只不过java的函数在1/0的时候主动throw了。
很多情况下,需求是在函数返回了好几层之外的地方来进行try catch。所以返回特殊
值来表示是不可行的。

【在 N******K 的大作中提到】
: 在计算领域 除以0 给负数开方 都不是错
: 1/0=inf 0/0=nan
: sqrt(-1)=i

t****t
发帖数: 6806
20
I've never seen a c++ compiler that can catch GPF. show me an example?

【在 c*****z 的大作中提到】
: 非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了.
相关主题
C++ 的 exception handlingC++ string类输入数据的问题
C++的exception大家常用吗?Recommend a C++ IDE?
请问一个visual studio的菜鸟问题how to write some C/C++ program to enable dual monitor?
进入Programming版参与讨论
x****u
发帖数: 44466
21
抓GPF又不是什么太空科技,直接抓Win32 SEH即可。这玩意在MSDN上有例子,剩下的就
是你愿不愿意包装的问题。

【在 t****t 的大作中提到】
: I've never seen a c++ compiler that can catch GPF. show me an example?
c******y
发帖数: 29
22
是可以,但是看起来不美观啊

【在 m*******l 的大作中提到】
: catch and deal with it by yourself ?
t****t
发帖数: 6806
23
that's still handled by yourself (i.e. "throw" by yourself), not compiler. i
am asking examples of compilers.

【在 x****u 的大作中提到】
: 抓GPF又不是什么太空科技,直接抓Win32 SEH即可。这玩意在MSDN上有例子,剩下的就
: 是你愿不愿意包装的问题。

x****u
发帖数: 44466
24
大错特错,自己handle SEH不是不可能,但非常麻烦几乎没有人做,需要用到线程本地
存储。实际上99%的Win32编译器都是在语法层面支持SEH的。
Windows下所有的C++编译器都支持SEH,只不过这个支持与OS相关,无法成为C++标准。
你问的是什么编译器抓得住GPF,答案是几乎全部的Windows编译器。

i
的就

【在 t****t 的大作中提到】
: that's still handled by yourself (i.e. "throw" by yourself), not compiler. i
: am asking examples of compilers.

t****t
发帖数: 6806
25
that's handled by the library. in other words, it's still "throw" by c++ its
elf. there is no implicit throw.

【在 x****u 的大作中提到】
: 大错特错,自己handle SEH不是不可能,但非常麻烦几乎没有人做,需要用到线程本地
: 存储。实际上99%的Win32编译器都是在语法层面支持SEH的。
: Windows下所有的C++编译器都支持SEH,只不过这个支持与OS相关,无法成为C++标准。
: 你问的是什么编译器抓得住GPF,答案是几乎全部的Windows编译器。
:
: i
: 的就

x****u
发帖数: 44466
26
SEH虽然能被C++抓住,但大多数情况下都不是C++抛出的。实际上SEH的主要目的就是解
决C++抛不出跨模块的异常这个缺陷的。

its

【在 t****t 的大作中提到】
: that's handled by the library. in other words, it's still "throw" by c++ its
: elf. there is no implicit throw.

t****t
发帖数: 6806
27
your SEH is still handled by library, calling your translator stub, and a na
tive C++ exception is thrown (by the stub), although this exception is async
hronous.
however i am not saying asynchronous exception vs synchronous exception. wha
t i am saying is, all catchable exception are generated by a throw statement
, here or there.

【在 x****u 的大作中提到】
: SEH虽然能被C++抓住,但大多数情况下都不是C++抛出的。实际上SEH的主要目的就是解
: 决C++抛不出跨模块的异常这个缺陷的。
:
: its

n******t
发帖数: 4406
28
你又开始自说自话。。这习惯真的得改。

【在 x****u 的大作中提到】
: SEH虽然能被C++抓住,但大多数情况下都不是C++抛出的。实际上SEH的主要目的就是解
: 决C++抛不出跨模块的异常这个缺陷的。
:
: its

b***i
发帖数: 3043
29
有道理
谈谈那个1/0在windows里面能catch吗?

na
async
wha
statement

【在 t****t 的大作中提到】
: your SEH is still handled by library, calling your translator stub, and a na
: tive C++ exception is thrown (by the stub), although this exception is async
: hronous.
: however i am not saying asynchronous exception vs synchronous exception. wha
: t i am saying is, all catchable exception are generated by a throw statement
: , here or there.

x****u
发帖数: 44466
30
你不懂就不要扯淡,SEH就是编译器支持的语言级别C++异常。

是解

【在 n******t 的大作中提到】
: 你又开始自说自话。。这习惯真的得改。
相关主题
受不了拉 - 技术发展太快!!! 学啥才不过时? (转载)真是痛恨喜欢 throw 的猪
如何在VC++下把raw图像快速写到硬盘里呢?为什么用try catch不住exception?
大家对 exception 都是怎么处理的?Windows XP与Multithreading Programming
进入Programming版参与讨论
b***i
发帖数: 3043
31
问题是抓它干吗?这种是编程错误,应该死掉,然后告诉哪里错了,程序员去改错。而
不是隐藏错误。

【在 c*****z 的大作中提到】
: 非法指针出的general protection应该是可以扑捉的, 堆栈溢出就不一定了.
t*****n
发帖数: 4908
32
We do not use C++ exceptions.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#
所以书本和实战是不同的。

【在 N******K 的大作中提到】
: 在vs debug下
: try{}里干点非法指针操作的事情 vs就报错 而不是被catch扑捉
: 是vs的问题 还是catch(...)的问题?

N******K
发帖数: 10202
33
学习c++ 就要掌握各种大坑 才能不掉进坑里

【在 t*****n 的大作中提到】
: We do not use C++ exceptions.
: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#
: 所以书本和实战是不同的。

x****u
发帖数: 44466
34
比如你想判断NULL指针又不打算写if。

【在 b***i 的大作中提到】
: 问题是抓它干吗?这种是编程错误,应该死掉,然后告诉哪里错了,程序员去改错。而
: 不是隐藏错误。

x****u
发帖数: 44466
35
不能跨模块的异常一点用也没有,比如使用数据库,内部错误就没法通过异常的方式返
回。

【在 t*****n 的大作中提到】
: We do not use C++ exceptions.
: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#
: 所以书本和实战是不同的。

1 (共1页)
进入Programming版参与讨论
相关主题
Recommend a C++ IDE?有必要学一学MFC吗?
how to write some C/C++ program to enable dual monitor?c++:exception 一问
受不了拉 - 技术发展太快!!! 学啥才不过时? (转载)try catch question
如何在VC++下把raw图像快速写到硬盘里呢?Exception 问题求助
大家对 exception 都是怎么处理的?Java的例外处理问题什么情况下不用写throws
真是痛恨喜欢 throw 的猪出一道C++题
为什么用try catch不住exception?弱问:c++里面throw就相当于return了吧?
Windows XP与Multithreading ProgrammingC++ 的 exception handling
相关话题的讨论汇总
话题: c++话题: catch话题: exception话题: throw话题: seh