从未处理的错误中获取更多错误信息

时间:2014-05-27 14:58:06

标签: c# dll runtime-error

我在桌面应用程序中使用C#。

我正在调用用C编写的DLL,我没有源代码。

每当我调用此DLL时,我都会收到一个未捕获的错误,我会在UnhandledException事件/委托中陷入错误。

  

对象引用未设置为对象的实例

但是堆栈跟踪是空的。

当我用谷歌搜索这个信息时,回复的信息是错误被放置在eleswhere然后重新抛出。但这只能在DLL中我没有源代码。

那么,无论如何我可以获得有关此错误的更多信息吗?

这是我的代码......

在program.cs ...

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    try
    {
        Exception _ex = (Exception)e.ExceptionObject; 
        //the stact trace property is empty here..
    }
    finally
    {
        Application.Exit();
    }
}

我的DLL ......

[DllImport("AutoSearchDevice.dll", EntryPoint = "Start", ExactSpelling = false,     CallingConvention = CallingConvention.StdCall)]
public static extern int Start(int ASD_HANDLE);

我称之为:

public static void AutoSearchStart()
{
    try
    {
        Start(m_pASD);
    }
    catch (Exception ex)
    {

    }
}

1 个答案:

答案 0 :(得分:1)

我的建议是考虑整合ELMAH

https://code.google.com/p/elmah/

ELMAH将在应用程序运行时记录背景中的异常。它最常用于Web站点和服务,在这些站点和服务中很难看到未处理的异常,但这里有一篇关于在控制台和桌面应用程序中使用它的SO文章。

Using ELMAH in a console application

应该能够看到能够从异常中写出所有相关数据。它也可以通过Nuget包进行安装,有很多关于设置ELMAH的好文章,如果你有设置问题,请尝试gogling http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

警告:如果dll开发人员坏了并且发现异常并且抛出一个像这样的新事件,你可能没有看到堆栈跟踪

try
{
//code
}
catch(Exception ex)
{
throw new Exception;
}

如果他们已经这样做了,或者创建了一个新的例外并且只是将信息复制过来,他们就会有效地吞下你正在寻找的细节。而那个臭,ELMAH仍然可以从dll中狙击异常,但我不确定。祝你好运。