如题。

解决方案 »

  1.   

    这要看怎样理解崩溃的意思了,对一个普通的应用程序来说,因为某种原因而导致程序无法执行下去,如除数零,这种错误系统是可以捕获的,并可以给你一个通知,由你来处理,如VB6的On error,当然,如果你不处理的话,你的应用程序显然就只能是崩溃了。
    这种崩溃只是你的程序设计上的问题,系统可以捕获你的错误,当然可以给你发消息,但要说明的是,系统不可能判断一个应用程序是崩溃了还是正常退出了,只能由你自己判断,就像上面的例子一样,系统给了你一个错误消息,你可以选择处理他,也可以选择不处理他,无论你做怎样的选择,对系统来说,你的程序都是正常退出的。
    另一种崩溃是遇到了不可预知的错误,如你正在向屏幕输出数据,而你此时却把显卡拔了,这种情况系统也无法处理,当然也就不可能给你什么消息(可以支持热插拔的除外)
    总的来说,崩溃可以理解为三个层面的,一是应用程序层,二是操作系统层,三是硬件层,下层的可以捕获上层的错误,可以给上层发错误消息,但处不处理是上层的事,所以是否崩溃只能是由处理的层来判断,下层是无法判断的
      

  2.   

    操作系统的错误捕获啊,就像VB中的On Error一样,一个VB的错误捕获可能是这样的:On Error goto Err_msg
    .....
    CheckMouse   '检查鼠标是不是点击超过一亿次,如果是就Err.Raise
    .....
    Err_exit:
    ...
    Err_msg:
        msgbox "由于你一秒钟内点击了一亿次鼠标,我有点忙不过来,所以将要关闭你的程序,你可以发送错误报告给我们"
        resume Err_exit你想象一下操作系统就是VB写的就不难理解了
      

  3.   

    前面说过,正常与不正常退出,只有应用程序自己知道,就像我要你办件事,你一去不回来,我能判断你没办事吗?你在中途出了点事故爬不起来(崩溃),我给你消息有什么用?就算我能看着你做事,你做错了我提醒你一下,但改不改正那又是你的事;万一你的错误危害了我(比如拿刀来捅我),对不起,我只好向你的亲属MsgBox "由于XXX的行为危害了我,我只好关闭他,你们可以向我的上级申诉"
      

  4.   

    程序退出的返回值,这对其它程序来说基本没有什么意义,程序的返回值是由程序自定义的,这一点对C程序特别明显(如果LZ学过C也许就不会有此一问了,VB还真不知道怎样让应用程序返回一个值,你可以再开贴问问牛人们),以前用C写的exe来做系统的启动菜单(在DOS时代),在C的main函数中可以用return 返回一个值(当然值的意义是什么,由写程序的人来决定,如他可以用1代表正常退出,也可以用2或其它数代表),在Dos环境中可以用ERRORLEVEL来捕获到(现在你可以在控制台环境中测试),这是以前Dos启动菜单的一种可能写法
    test.exe      
    rem test.exe 返回1、2、3
    if ERRORLEVEL 3 boot1.bat         
    rem 是3执行boot1
    if ERRORLEVEL 2 boot2.bat         
    rem 是2执行boot2
    if ERRORLEVEL 1 toot3.bat         
    rem 是1执行boot3总之,只有程序设计者才知道返回值的意义,他的应用程序返回值对其它人来说基本没什么意义,当然操作系统也不会去试图理解一个应用程序的返回值