如何因为本机C ++ DLL失败而捕获C#AppCrash

时间:2013-02-08 00:52:09

标签: c# c++ .net try-catch crash

我有一个从本机c ++(比如XYZ.dll)创建的DLL。我在一个包装器C ++ .NET中链接该DLL。这个包装器的一个对象用在我最高级别的C#代码中。

我的问题是:有时我的DLL中的一个函数崩溃,而我的最高级C#代码与AppCrash崩溃;崩溃模块:XYZ.dll。我试图找出它崩溃我的原生C ++代码的地方,但事实证明这是徒劳的。我想知道是否有办法让我在C#代码中捕获这个崩溃并继续前进。

3 个答案:

答案 0 :(得分:1)

我不认为这是您正在寻找的答案,但至少它将有助于解决问题。检查AppDomain.UnhandledException ...您应该能够捕获并记录堆栈跟踪。

答案 1 :(得分:0)

这是您在Visual Studio中调试的内容吗?如果没有,请考虑安装Windows调试程序并在cdb.exe下运行您的应用程序。确保您的非托管组件具有符号(.pdb)。如果您在调试器下运行您的应用程序(可以是Visual Studio或cdb / windbg)并且可以重新发生崩溃,那么您应该能够获得堆栈跟踪。既然你暗示你拥有非托管库,我可以假设你拥有源代码吗?如果您在VS中,请确保禁用Debug Just My Code设置。如果你在windbg中,那么一旦遇到第一次机会异常,崩溃点就会显示你的堆栈跟踪。

答案 2 :(得分:0)

你绝对可以“抓住”这次崩溃。

在C ++ .NET Wrapper / Handler中,将所有调用包装到第三方DLL中,用C ++ try / catch块包装所有调用。这应该更有可能奏效。

如果没有,请切换到使用Windows结构化异常处理。这将捕获本机Win32异常并杀死它们。您可以在here上找到Win32文档。

相关问题