最近做一个系统,程序不声不响的退出,可在调试的时候没事。
有时,冷不丁的,退出了,由于是后台运行程序,还没有注意呢!
我的意思是,有什么工具或方法可以找到它的原因。
这是软件健壮性的一个考量,很重要。
另外,程序崩溃了重要通知我一下呀,任何软件都可能崩溃(也可能因为非本软件的原因)。至少最好要健壮些,有好些才对得起观众。
有时,冷不丁的,退出了,由于是后台运行程序,还没有注意呢!
我的意思是,有什么工具或方法可以找到它的原因。
这是软件健壮性的一个考量,很重要。
另外,程序崩溃了重要通知我一下呀,任何软件都可能崩溃(也可能因为非本软件的原因)。至少最好要健壮些,有好些才对得起观众。
解决方案 »
- 急,有没有办法,让报表合并同类项啊?
- ExpressQuantumGrid.Suite.v5.11 奇怪的问题.
- 求助:为什么for循环里面的continue到最后一次就出现"List index out of bounds(0)"
- 如何手动创建reportbuilder的控件?
- 在线,求如何获得MP3文件播放时间
- 为什么?Delphi书籍大都是有国人出版的,几乎没有国外出版的,经典的?
- [提问] 变长字符串在行文件(流文件)中的存取及其他
- 关于WebSnap程序发布在IIS上的问题,目录访问权限得不到
- 谁知道哪有Delphi写的代理服务器源代码?
- 怎样把QReport在自定义的预览窗口中显示出来
- 一个例题 求解
- xml文件的问题
SetUnhandledExceptionFilter(EXCEPTION_FUNCTION)
其中EXCEPTION_FUNCTION是回调函数:
SetUnhandledExceptionFilter
设置异常捕获函数.
当异常没有处理的时候,系统就会调用SetUnhandledExceptionFilter所设置异常处理函数.
例如一些程序在出错的时候,会向用户报告说程序那出错就是利用这个.例如QQ..
异常处理中的一部分
当发生异常时,比如内存访问违例时,CPU硬件会发现此问题,并产生一个异常(你可以把它理解为中断)
然后CPU会把代码流程切换到异常处理服务例程。操作系统异常处理服务例程会查看当前进程是否处于调试状态
如果时,则通知调试器发生了异常,如果不是则操作系统会查看当前线程是否安装了的异常帧链(FS[0]),如果安装了SEH(try.... catch....),则调用SEH,并根据返回结果决定是否全局展开活局部展开。如果异常链中所有的SEH都没有处理此异常,而且此进程还处于调试状态,则操作系统会再次通知调试器发生异常(二次异常)。如果还没人处理,则调用操作系统的默认异常处理代码UnhandledExceptionHandler,不过操作系统允许你Hook这个函数,就是通过SetUnhandledExceptionFilter函数来设置。大部分异常通过此种方法都能捕获,不过栈溢出、覆盖的有可能捕获不到。
大部分保护壳都采用异常处理技术,跳出正常的代码指令流程,来迷惑Cracker。