vc如何防止崩溃?

iwantnon 2010-02-03 09:02:40
在写一个编译器,基本完成了,但现在有一个问题就是用户输入的程序如果发生运行时错误(非运行时的错误可以由编译器检查出来)的话则连同编译器一起崩溃,这样显然是不行的,我希望有一个办法能够使当用户程序发生运行时错误时只退出用户的程序而返回到编译器(即编译器本身不受影响),请问有什么办法?
...全文
342 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
donkey301 2010-02-26
  • 打赏
  • 举报
回复
引用 7 楼 iwantnon 的回复:
引用 5 楼 donkey301 的回复:
做异常处理,一般是try...catch语句,如果你有c++ primer的话,第17.1节就专门讲了异常处理,我也在学。
try...catch可以在崩溃之前捕捉到设计者没有预料到的错误吗?这个以前没用过,只是在这个程序中为了从深度递归中跳出我在网上查到个throw -- try...catch方法,但那个好像只能处理预料之中的错误。

用__try ... __exception可以处理部分预料之外的错误,你自己可以测试一下下面这个网页10楼的回答
http://topic.csdn.net/u/20100222/09/2e14b4aa-5a09-4981-8bc2-2738b0299715.html
14楼说的SetUnhandledExceptionFilter更好点,我测试了也可以查到部分未预料错误。
mathe 2010-02-12
  • 打赏
  • 举报
回复
使用双进程,让编译部分和执行部分分成两个进程可以解决问题。
但是你现在是解释执行的话比较难分离。只能将一些关键部分分离到一个进程,然后如果检测到另外一个进程(解释执行进程)崩溃,重新启动它就可以了
iwantnon 2010-02-12
  • 打赏
  • 举报
回复
多谢各位的意见了。
其实我本以为系统会有某个功能能功自动预防任何崩溃的,看来是没有这样的功能,只能从自已的程序上下功夫了。
某人说过:“知道某条路不通本身也是一种进步”。
过几天结帖。
logiciel 2010-02-10
  • 打赏
  • 举报
回复
引用 13 楼 iwantnon 的回复:
引用 10 楼 delphiguy 的回复:解释执行,一切都在你的控制之下,脚本写得再乱,怎么会把解释器都搞崩溃了呢?只可能是你的解释器语法分析、执行部分有BUGs。
不是的,你可以实验一下,如果用户源程序中有错误,但是你仍按正常情况来分析的话,程序必定会崩溃,除非把把各种情况都人为预期出来。
但现在的问题是:预期所有可能错误,可能吗?


LZ需要改变考虑问题的角度。解释器的设计目标不是预期所有可能错误,而是要能够处理各种没错和有错的用户源程序,并防止崩溃。

建议LZ考虑程序的安全性设计、防御性设计等技术。

在调试时,可以找到崩溃原因,如数组越界、指针错误。
  • 打赏
  • 举报
回复
引用 13 楼 iwantnon 的回复:
引用 10 楼 delphiguy 的回复:
解释执行,一切都在你的控制之下,脚本写得再乱,怎么会把解释器都搞崩溃了呢?只可能是你的解释器语法分析、执行部分有BUGs。
不是的,你可以实验一下,如果用户源程序中有错误,但是你仍按正常情况来分析的话,程序必定会崩溃,除非把把各种情况都人为预期出来。
但现在的问题是:预期所有可能错误,可能吗?


不可能那就是你的语法分析部分有问题,检测到语法错误之后就应该停下来提示错误位置,即便执行,也不应该把解释器本身搞死,因为是在虚环境中执行的。
iwantnon 2010-02-09
  • 打赏
  • 举报
回复
引用 10 楼 delphiguy 的回复:
解释执行,一切都在你的控制之下,脚本写得再乱,怎么会把解释器都搞崩溃了呢?只可能是你的解释器语法分析、执行部分有BUGs。

不是的,你可以实验一下,如果用户源程序中有错误,但是你仍按正常情况来分析的话,程序必定会崩溃,除非把把各种情况都人为预期出来。
但现在的问题是:预期所有可能错误,可能吗?
iwantnon 2010-02-09
  • 打赏
  • 举报
回复
引用 9 楼 donkey301 的回复:
程序如果崩溃,而且原因未知我觉得这个问题很严重。反正如果我碰到这个问题一定会停下来找到这个崩溃原因才行,以后再解决就更麻烦了。

停下来找崩溃原因?
程序是用户输入的,又不是程序员输入的,怎么“停下来找”?
logiciel 2010-02-08
  • 打赏
  • 举报
回复
引用 10 楼 delphiguy 的回复:
解释执行,一切都在你的控制之下,脚本写得再乱,怎么会把解释器都搞崩溃了呢?只可能是你的解释器语法分析、执行部分有BUGs。


同意。
  • 打赏
  • 举报
回复
解释执行,一切都在你的控制之下,脚本写得再乱,怎么会把解释器都搞崩溃了呢?只可能是你的解释器语法分析、执行部分有BUGs。
donkey301 2010-02-08
  • 打赏
  • 举报
回复
引用 7 楼 iwantnon 的回复:
引用 5 楼 donkey301 的回复:
做异常处理,一般是try...catch语句,如果你有c++ primer的话,第17.1节就专门讲了异常处理,我也在学。

try...catch可以在崩溃之前捕捉到设计者没有预料到的错误吗?这个以前没用过,只是在这个程序中为了从深度递归中跳出我在网上查到个throw -- try...catch方法,但那个好像只能处理预料之中的错误。

try...catch是处理预料到的错误的。
程序如果崩溃,而且原因未知我觉得这个问题很严重。反正如果我碰到这个问题一定会停下来找到这个崩溃原因才行,以后再解决就更麻烦了。
iwantnon 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dragonzht 的回复:]
不是编译器吧,感觉是解释性语言或操作系统了
你说的问题很正常了,DOS系统中程序有问题系统就崩了,Windows好多了,但还是没法杜绝这种问题
[/Quote]
呵,说起来非常汗,我刚搞明白,我写的这个应该叫做解释器,是把源代码输入之后直接运行的。
我加强了一下错误检查,但还是不能保证不会崩溃,因为毕竟用户输入的源程序所包含的错误是不胜枚举的。
我的windows很少崩溃,vc6也不是很容易崩溃的呀,它们是怎么防止的呢?我们自己的程序能不能到这种“出错时只是操作失败但是不会崩溃”的效果?
这两天没来,一直在修改这个“编译器”程序,程序已经上传(内含语法说明和示例程序),见这里:
http://wantnon.spaces.live.com/blog/cns!22376C1C5B93C0AD!464.entry?&_c02_vws=1
iwantnon 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 donkey301 的回复:]
做异常处理,一般是try...catch语句,如果你有c++ primer的话,第17.1节就专门讲了异常处理,我也在学。
[/Quote]
try...catch可以在崩溃之前捕捉到设计者没有预料到的错误吗?这个以前没用过,只是在这个程序中为了从深度递归中跳出我在网上查到个throw -- try...catch方法,但那个好像只能处理预料之中的错误。
ssawee 2010-02-04
  • 打赏
  • 举报
回复
换ECC内存和服务器用的cpu或者用工作站机器
或是换些稳定的操作系统如unix/linux(当然就没VC了)
Q_Jizi 2010-02-04
  • 打赏
  • 举报
回复
楼主做的编译器 这个可能要深入了解下操作系统了
donkey301 2010-02-04
  • 打赏
  • 举报
回复
做异常处理,一般是try...catch语句,如果你有c++ primer的话,第17.1节就专门讲了异常处理,我也在学。
dragonzht 2010-02-03
  • 打赏
  • 举报
回复
不是编译器吧,感觉是解释性语言或操作系统了
你说的问题很正常了,DOS系统中程序有问题系统就崩了,Windows好多了,但还是没法杜绝这种问题
Q_Jizi 2010-02-03
  • 打赏
  • 举报
回复
不太懂 是不是和进程有关 当用户程序DOWN掉后系统及时关闭用户程序的进程?
JaneThink 2010-02-03
  • 打赏
  • 举报
回复
这应该是你的编译器,功能 做好把

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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