try...catch语句在编译后不见了,为什么?

rchu 2005-04-29 03:03:39
用VC6,程序中用了多次try...catch语句。但是时灵时不灵。经反汇编发现,部分try...catch语句被编译器无缘无故的去掉了,不知何故,盼回答。
...全文
268 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
bing_huo 2005-04-30
  • 打赏
  • 举报
回复
我只知道 c++的try catch 除了catch(...) 或者自定义异常这两种方式以外 是不能捕捉到除0的。。。
cmoring 2005-04-30
  • 打赏
  • 举报
回复
不懂,不解 study
bing_huo 2005-04-30
  • 打赏
  • 举报
回复
除0你怎么catch的??

catch(...) //是这样???
wohow 2005-04-30
  • 打赏
  • 举报
回复
运行时有没有捕捉到除0异常?
rchu 2005-04-30
  • 打赏
  • 举报
回复
但是我在try块里面除了调用dll以外,还故意制造了一个除0错误,结果这个该死的try还是没有给我编译出来。
rchu 2005-04-30
  • 打赏
  • 举报
回复
编译器还专门用一个waring来提示这里可能有除0错,但是它居然眼睁睁的看着我写的try catch(...)而无动于衷,真是!◎#¥
rchu 2005-04-30
  • 打赏
  • 举报
回复
对,我是用 catch(...),除0没有被捕获,发生了非法操作(即使不反汇编,这也可以说明try catch块失效了)。而在同一个程序的其他地方,这么写就没有问题。
真是奇怪了。
dananhai 2005-04-30
  • 打赏
  • 举报
回复
关注~~~
mostideal 2005-04-30
  • 打赏
  • 举报
回复
ding
bzCpp 2005-04-29
  • 打赏
  • 举报
回复
VC好像缺省得认为 extern "C" 得函数不抛出异常地,你得 DLL 是不是声明成了 extern "C" 得了。
rchu 2005-04-29
  • 打赏
  • 举报
回复
我想应该不是优化掉了,优化也得保证代码执行不受影响。明明我有除0错误,它还把异常处理优化掉,这不是拿我开涮么。
rchu 2005-04-29
  • 打赏
  • 举报
回复
try catch段的汇编代码大致是这个样子:

:004015E7 64A100000000 mov eax, dword ptr fs:[00000000]
:004015ED 50 push eax
:004015EE 64892500000000 mov dword ptr fs:[00000000], esp

uoyevoli 2005-04-29
  • 打赏
  • 举报
回复
不可能吧????????????
oyljerry 2005-04-29
  • 打赏
  • 举报
回复
Release有优化代码的功能,不知try catch是否这样处理了
sankt 2005-04-29
  • 打赏
  • 举报
回复
关注
lipotee 2005-04-29
  • 打赏
  • 举报
回复
关注一下。交流一下。问一下楼主,有try catch段的汇编代码是什么样子的?
学习一下
Cnwanglin 2005-04-29
  • 打赏
  • 举报
回复
关注
rchu 2005-04-29
  • 打赏
  • 举报
回复
顶一个
rchu 2005-04-29
  • 打赏
  • 举报
回复
非常确定,我对反汇编有一定经验,所以肯定可以看出来。而且,我在某些try块里故意加入了0做除数的错误,发生了非法操作,而没有执行我的catch块。
runall 2005-04-29
  • 打赏
  • 举报
回复
关注,楼主确定真的有些try块不见了?
加载更多回复(4)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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