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

解决方案 »

  1.   

    这……有点难猜,试试先不引用那dll看看
      

  2.   

    你试试在 main 第一行注册 AppDomain.CurrentDomain.UnhandledException 事件
    AppDomain.CurrentDomain.UnhandledException += (v1, v2) =>
    {
        Exception ex = (Exception)v2.ExceptionObject;
        // 这里加些提示代码,比如往文件里写些出错信息,看看这样能不能捕获到异常
    };
      

  3.   

    c的东西一旦出错你这里应当是获取不到什么很有价值的信息
    你不放在dll里面写日志
      

  4.   

    显然是那个C的dll有Bug,要有源码,调试一下
    调试dll
      

  5.   

    要是在CATCH中捕获不到的话本人感觉好像在DLL中出问题了
      

  6.   

    估计c调用dll出问题了,vs无法处理此异常,会自动退出
      

  7.   

    dll的错误try不了的,只能看它的源码了,估计内存溢出可能性比较大。
      

  8.   

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

  9.   

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

  10.   

    就是说,问题的产生可能是你传入的实参有问题引起的(当然dll方的容错性可能也不够)。如果按三楼的方法可捕捉到异常,调用dll时传入的实参应该记录下来,用以分析