我有一个在Windows上运行的C#WPF应用程序,它利用c ++编写的代码编译为动态库。我们有c ++-cli代码段,用于在C#GUI部分和C ++引擎部分之间转换数据。 对于C#部分本身中未处理的异常,我们添加了以下代码段:
static void Main(string[] args)
{
some code...
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
some code...
}
private static void CurrentDomainOnUnhandledException(object sender,UnhandledExceptionEventArgs e)
{
Logger.Error(e.ExceptionObject.ToString());
}
这对于从c ++代码,cli代码以及c#代码引发的异常都很好。我们现在正在尝试以某种方式(如果可能)捕获来自c ++ \ cli代码的段错误或其他崩溃?显然,我们无法使用“ try / catch”包装对c ++ \ cli代码的调用,因为它不会捕获此类崩溃。
编辑并添加以更好地进行解释:我知道segfaults和其他系统崩溃是不好的,不是造成的。事实是,组织中需要开发更多代码并使用该软件调试和完善其代码的200余个人使用了我们的软件。因此,有时他们的代码中会包含那些错误,并且并非所有错误都被其他人完全捕获,因此我们正在寻找代码内部的解决方案以帮助维护该错误以及复制任何错误。
我知道这不是我们应该“追求的”目标,并且如果发生段错误也不是一件好事,但是由于我们的软件已被组织中数百人使用,因此我们必须有一种方法来捕获这些崩溃。发生,用户将其报告给我们。 目前,如果确实发生了这种崩溃,它将仅生成基于崩溃的常规基于Windows的弹出框,然后仅关闭应用程序而不会记录有关崩溃的任何信息。
感谢您提出任何建议,如果我的问题有误,我深表歉意。如果需要任何澄清,请告诉我,我会尽力进行编辑。
编辑#2: 在我们的软件的本机版本(这是一个没有任何GUI元素的控制台程序)中,我们确实有一个可行的解决方案。该解决方案在我们软件的Windows和Linux发行版中均能很好地运行,并且它可以捕获信号并将堆栈跟踪信息写入日志,然后再关闭。