再请教一个基础问题:关于try catch的使用

teleinfor 2009-08-31 12:22:26
某函数内部调用其他函数时,如下使用try catch块:

try
{
int nRetCode = TestFunction();
}
catch(...)
{
::MessageBox (...);
return ;
}


在TestFunction()函数里面有可能会有异常情况出现,本意是想通过这里捕获该函数内部抛出的异常,请问这样是否能够达到目的?
...全文
125 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
WFORLS 2009-09-06
  • 打赏
  • 举报
回复
偶是菜鸟,飘过学习
teleinfor 2009-09-06
  • 打赏
  • 举报
回复
程序崩溃了,应该是内存访问越界之类的东西。不过就是没有自动抛出异常,我用的catch 啥也米有catch到。
favorxx 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 teleinfor 的回复:]
引用 15 楼 emyueguang 的回复:
分析一下喔,可能有下面的情况:
1.你的目标函数没有异常的情况,它当然连个屁都不会放(如果出现了异常情况,不用你throw,只要在这个目标函数内部没有做异常处理,它自己会向上throw)
2.你的catch捕捉到了异常没有进行处理,比如
    try{。。。}catch(。。。){在这个地方没有进行处理}



呵呵,就是目标函数内部出现了问题。崩溃了,结果我在函数外catch不到任何异常
跟没有进入catch(...){::MessageBox(...);}我在目标函数内没有做异常处理,本打算外部调用者统一处理的。
[/Quote]

你的那个TestFunction是什么异常?既然是测试的是不是应该知道是什么异常呢?可以运行但是结果不对的不算异常。

try catch的写法没有问题
lucian2007 2009-09-02
  • 打赏
  • 举报
回复
textbook
dengxuxing 2009-09-02
  • 打赏
  • 举报
回复
在TestFunction();用它看看.
teleinfor 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ringphone 的回复:]
你试一下DEBUG版本能否捕获异常。两个版本的捕获方式是不一样的,如果DEBUG能捕获而RELEASE不能捕获,给RELEASE版本编译参数里加个/EHa再试试看。
[/Quote]

DEBUG 版本捕获都是没有试验,我直接开发环境运行run with debug了,直接定位到问题。可是关键有些有问题很难复现,只能通过release长期测试,然后catch分析了。

很是犯愁,没有好的方案这块。
ringphone 2009-09-01
  • 打赏
  • 举报
回复
你试一下DEBUG版本能否捕获异常。两个版本的捕获方式是不一样的,如果DEBUG能捕获而RELEASE不能捕获,给RELEASE版本编译参数里加个/EHa再试试看。
teleinfor 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 emyueguang 的回复:]
分析一下喔,可能有下面的情况:
1.你的目标函数没有异常的情况,它当然连个屁都不会放(如果出现了异常情况,不用你throw,只要在这个目标函数内部没有做异常处理,它自己会向上throw)
2.你的catch捕捉到了异常没有进行处理,比如
    try{。。。}catch(。。。){在这个地方没有进行处理}

[/Quote]

呵呵,就是目标函数内部出现了问题。崩溃了,结果我在函数外catch不到任何异常
跟没有进入catch(...){::MessageBox(...);}我在目标函数内没有做异常处理,本打算外部调用者统一处理的。
churenxh 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 emyueguang 的回复:]
分析一下喔,可能有下面的情况:
1.你的目标函数没有异常的情况,它当然连个屁都不会放(如果出现了异常情况,不用你throw,只要在这个目标函数内部没有做异常处理,它自己会向上throw)
2.你的catch捕捉到了异常没有进行处理,比如
    try{。。。}catch(。。。){在这个地方没有进行处理}

[/Quote]
赞同
emyueguang 2009-09-01
  • 打赏
  • 举报
回复
分析一下喔,可能有下面的情况:
1.你的目标函数没有异常的情况,它当然连个屁都不会放(如果出现了异常情况,不用你throw,只要在这个目标函数内部没有做异常处理,它自己会向上throw)
2.你的catch捕捉到了异常没有进行处理,比如
try{。。。}catch(。。。){在这个地方没有进行处理}
teleinfor 2009-09-01
  • 打赏
  • 举报
回复
多谢各位高人的确认!

不过现在我的问题出现了,目标函数内部没有做throw处理,我这里啥也没有捕获到,结果程序突然就消失了,连个p都没放!是release版本的。我本来想通过添加尽可能完备的catch块捕获,结果徒劳一场。。。

请指教try catch的使用以及工作场景。
副组长 2009-08-31
  • 打赏
  • 举报
回复
try
{
...
throw "failure!";
}
catch( ... )
{
...
}
或者

TRY
{
...
}
CATCH_ALL(e)
{
...
}
END_CATCH_ALL

等都可以
wshcy512 2009-08-31
  • 打赏
  • 举报
回复
如果你函数里面没有捕获,那么就能捕获得到
chenyu2202863 2009-08-31
  • 打赏
  • 举报
回复
如果你想捕获SEH的的异常就需要 用到_set_se_exception
周成风 2009-08-31
  • 打赏
  • 举报
回复
异常是会传递的,当前函数没有处理,给传给调用函数,一直往上传,没有人处理可能就死机了。
vagrantisme 2009-08-31
  • 打赏
  • 举报
回复
完全可以的非常。
dirdirdir3 2009-08-31
  • 打赏
  • 举报
回复
可以......
我辣椒哥 2009-08-31
  • 打赏
  • 举报
回复
可以的
MoXiaoRab 2009-08-31
  • 打赏
  • 举报
回复
这个当然可行了,本来就是这样的啊
lang528 2009-08-31
  • 打赏
  • 举报
回复
肯定没问题
加载更多回复(4)
内容概要:本文旨在帮助读者应对Java校招面试,通过解析常见面试题,结合理论与代码示例,深入浅出地讲解Java基础知识。文章涵盖Java基础特性(平台无关性、面向对象特性)、数据类型(基本数据类型、引用数据类型)、关键字(static、final)、方法相关(方法重载、方法覆盖)、流程控制语句(if-else、switch、for循环、while循环、do-while循环)、数组与集合(数组、ArrayList、HashMap)以及异常处理(try-catch-finally、throws和throw)。每个知识点都配有具体的代码示例,便于读者理解和实践。 适合人群:即将参加Java校招面试的应届毕业生或初学者,特别是那些希望系统复习和巩固Java基础知识的人群。 使用场景及目标:①帮助读者理解Java的核心概念,如平台无关性、封装、继承、多态等;②通过代码示例加深对关键字、方法重载与覆盖的理解;③掌握常用的流程控制语句和数据结构,如数组、ArrayList、HashMap;④学会处理常见异常,提高代码健壮性。 阅读建议:建议读者结合实际编程练习,逐个尝试文中提供的代码示例,理解每个知识点的具体应用场景。对于不熟悉的领域,可以通过编写更多类似的代码来强化记忆。同时,遇到不懂的地方可以参考官方文档或向他人请教

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧