登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: 《每月编程》2005年6月     [回主站]     [分站链接]
标题
《每月编程》2005年6月
clq
浏览(0) + 2005-06-11 12:05:28 发表 编辑

关键字:

1.让VC程序能捕获除零错等异常
在C++中,除零错与访问空指针的错误是不能用try...语句捕获的。这导致了程序员必须检测每一个变量与它们的范围,否则程序会立即崩溃。有人说这是好事,但实际情况则是不可能做到如此细致。这实在是C++的缺陷,在delphi、java等更现代一些是语言是不会这样的。delphi即使在没有try的情况下也只会退出本函数,而不是退出整个程序。那么就没办法了吗。当然有,至少VC中有一个功能能完成这种捕获:采用异步异常模型。这样就能捕获非法内存访问、除零等结构化异常。使用的方法很简单,就是在编译选项时加上/EHa的编译参数。对于VC6是在project->setting->c/c++->project options框中增加。如图所示。


那么对于另外一个著名的编译器GCC呢?有什么办法完成这一功能?我看过一篇在linux下自定义出错处理函数的文章,但是在windows平台的GCC中,我没有得到预期的效果,也许还要再寻找别的方法。  

附,会引起崩溃的代码:
     /*对于release版本,如果你运行,你会发现程序不能捕获非法内存访问、除零等结构化异常,这是因为VC在release版默认是同步异常,不捕获结构化异常,只能捕获C++的异常,所以你需要修改编译选项,采用异步异常模型,在project->setting->c/c++->project options框中增加/EHa的编译选项。*/
     try
     {
     int i1 = 0;
     int i2 = 100/i1;
     }catch(...){}

     try{
     printf(NULL, 1);
     }catch(...){}


前些天,我还碰到了用strstr()函数都会崩溃的“笑话”(原因还是空字符串指针)。

后记:对于我来说找到这个方法非常重要。因为象IE这样经常崩溃的程序是令人厌恶的(当然opera、firefox崩溃的时候并不比IE少),虽然C++程序员可能觉得是天经地义的,但用户可不会这样认为。

clq
2005-6-11 12:05:53 发表 编辑

[图片]
...

clq
2005-6-11 12:15:29 发表 编辑

大家可参考这篇《C++异常中的堆栈跟踪》
http://clq.3322.org/bbs/read.php?fid=9&tid=361

clq
2005-6-29 23:45:34 发表 编辑

2.用VC编译著名的嵌入式数据库SQLite
SQLite的编译对于非VC程序员还是有点麻烦,因此我写了点自己使用的过程.请见:
http://clq.3322.org/bbs/read.php?tid=390

明天或过几天再上传代码吧.


总数:3 页次:1/1 首页 尾页  
总数:3 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1