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

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

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


在TestFunction()函数里面有可能会有异常情况出现,本意是想通过这里捕获该函数内部抛出的异常,请问这样是否能够达到目的?
...全文
127 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)

16,551

社区成员

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

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

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