日期:2014-05-17  浏览次数:21074 次

程序为何突然退出
操作系统:windows xp sp3
程序开发工具:vs2010c#,在程序中有调用c写的dll
现象:
程序无规律、无故、偶尔、突然退出,即突然消失,我在程序的Main中加了一个catch也无法捕捉到错误信息。
请教各位,这是什么原因呢,如何定位到错误位置?

------解决方案--------------------
这……有点难猜,试试先不引用那dll看看
------解决方案--------------------
估计是调用出错了,一些致命错误导致退出,最常见的就是死循环,你就一下日志,看看是哪部草组引起崩溃的
------解决方案--------------------
你试试在 main 第一行注册 AppDomain.CurrentDomain.UnhandledException 事件
C# code
AppDomain.CurrentDomain.UnhandledException += (v1, v2) =>
{
    Exception ex = (Exception)v2.ExceptionObject;
    // 这里加些提示代码,比如往文件里写些出错信息,看看这样能不能捕获到异常
};

------解决方案--------------------
c的东西一旦出错你这里应当是获取不到什么很有价值的信息
你不放在dll里面写日志
------解决方案--------------------
异常抛到C的dll代码了
------解决方案--------------------
显然是那个C的dll有Bug,要有源码,调试一下
调试dll
------解决方案--------------------
用3L的方法加日志,程序如遇到无法处理的异常自动退出时会记录日志。
------解决方案--------------------
要是在CATCH中捕获不到的话

本人感觉好像在DLL中出问题了


------解决方案--------------------
估计c调用dll出问题了,vs无法处理此异常,会自动退出
------解决方案--------------------
dll的错误try不了的,只能看它的源码了,估计内存溢出可能性比较大。
------解决方案--------------------
探讨
你试试在 main 第一行注册 AppDomain.CurrentDomain.UnhandledException 事件

C# code
AppDomain.CurrentDomain.UnhandledException += (v1, v2) =>
{
Exception ex = (Exception)v2.ExceptionObject;
// 这里加些提示……

------解决方案--------------------
没源码可能是够呛的。以前曾遇到过这样的问题。发现是本机dll有Bug,就是野指针、错误的内存写入什么的,然后估计是因此破坏了托管堆栈或其它数据区段
或者向厂家反映一下,或者从dll调用时待传入的实参入手,先进行严格的检查或限制
------解决方案--------------------
探讨
或者从dll调用时待传入的实参入手,先进行严格的检查或限制

------解决方案--------------------
直接找开发商。让他们解决!
------解决方案--------------------
探讨

DLL是厂家提供的开发包,无源码。
谢谢各位,我按3楼的方法试试看能不能捕捉到点什么。