关于程序自动退出,一般可能都是堆栈什么的出了问题,因此我也一直很关注这一块。
程序运行在2000操作系统下,通过usb转多串口来实现对底层硬件模块的操作,一直以来都没有出什么大的问题,今天将底层硬件的两个模块互换一下位置,程序大概在运行1个多小时后崩溃(我已经使用了异常处理机制,在CWinApp的构造函数中就加了捕获函数,但很遗憾,程序退出没有给出预期的错误对话框)。在系统日志上,发现了一个不正常的事件“RSM 无法管理 PhysicalDrive1 库。它遇到了一个未指定的错误。 造成这个错误的原因可能有几个问题,包括但不限于 数据库损坏、与库通讯失败或 没有足够的系统资源。”,经过在网上搜寻,并自己分析,可能原因有:供电不稳定(这个我也最担心,但是没有好的方式去证明),USB转多串口没有遵循Intel的规范(这个更难证明了,这个驱动以及硬件结构是外包的)。目前偶还没有什么好的办法去证明我的猜想,当然,程序也不一定就是一定没有问题(至少目前还想不出来造成程序崩溃的地方有哪些),因为在另外一台硬件结构完全不一样的机器上运行(连续一个月)一直没有出现任何问题,因此,可能是这台机器的某些硬件特性不同干扰了我的程序,而我的程序没有考虑到这种情况从而导致堆栈严重错误??????可我已经做了崩溃处理了啊
郁闷中,同时散分。希望各位给我一些建议,调试的建议,不胜感激!
程序运行在2000操作系统下,通过usb转多串口来实现对底层硬件模块的操作,一直以来都没有出什么大的问题,今天将底层硬件的两个模块互换一下位置,程序大概在运行1个多小时后崩溃(我已经使用了异常处理机制,在CWinApp的构造函数中就加了捕获函数,但很遗憾,程序退出没有给出预期的错误对话框)。在系统日志上,发现了一个不正常的事件“RSM 无法管理 PhysicalDrive1 库。它遇到了一个未指定的错误。 造成这个错误的原因可能有几个问题,包括但不限于 数据库损坏、与库通讯失败或 没有足够的系统资源。”,经过在网上搜寻,并自己分析,可能原因有:供电不稳定(这个我也最担心,但是没有好的方式去证明),USB转多串口没有遵循Intel的规范(这个更难证明了,这个驱动以及硬件结构是外包的)。目前偶还没有什么好的办法去证明我的猜想,当然,程序也不一定就是一定没有问题(至少目前还想不出来造成程序崩溃的地方有哪些),因为在另外一台硬件结构完全不一样的机器上运行(连续一个月)一直没有出现任何问题,因此,可能是这台机器的某些硬件特性不同干扰了我的程序,而我的程序没有考虑到这种情况从而导致堆栈严重错误??????可我已经做了崩溃处理了啊
郁闷中,同时散分。希望各位给我一些建议,调试的建议,不胜感激!
如果没有以上情况,就有很有可能是堆栈被破坏.函数返回的地址被错误的改写,程序跳到未知的位置去了.
如果想确定是不是堆栈被破坏造成的.应该没有什么好办法.(至少我不知道),只能在调试状态下运行,退出后检查调用栈.如果调用栈不完整,或者调试器根本无法显示调用栈,那一定是堆栈错误.
_set_se_translator(SeTranslator);
SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
来捕获异常,为什么会捕捉不到?
理论上任何程序异常都会自动调用我的MyUnhandledExceptionFilter异常处理函数,可是没有
http://community.csdn.net/Expert/topic/4470/4470922.xml?temp=.9018061
里面sxslyy(孤松傲雪)朋友的意见不妨一试,Good luck!
另外,我个人感觉USB转串口不可靠,多串口我觉得用PCI得串口卡或串口服务器是更好的解决方案。
目前市面上已经有许多这样的产品了,特别在销售到外国方面的小产品。
搂主出现的这种问题,比较异常,
毕竟还是需要看你的硬件跟驱动的兼容性问题,USB驱动要涉及到电源管理方面的处理的。
RS232是靠电压传输的,国内几十元的产品有几个有保护电路?
如果不便安装调试环境,打开drwtsn32,监控一下。
蛛丝马迹总可以找到。驱动有问题的可能性很大。