我知道如何使用ADPlus或DebugDiag生成Crash Dump文件,但我想知道是否有办法在客户的计算机上执行此操作而不安装这些工具...具体来说,我希望能够配置我的应用程序(例如,使用注册表值)在严重故障的情况下生成崩溃转储.更具体地说,我需要能够从C#应用程序执行此操作,但如果有必要,我不介意P/Invoke.谢谢!
我有一些复杂的功能,这些功能在Task通过TPL生成的异步程序中运行,有时可能会以意外的方式失败。当发生此类故障时,这表示可能导致程序状态损坏的编程错误。因此,我不希望我的程序捕获异常,对其进行处理并“套用”,我希望我的进程崩溃并终止。
我还希望事情以Windows错误报告系统将其检测为崩溃的方式消亡,并进行所有有用的调试,例如捕获小型转储,将其发送给Microsoft等。
我知道这可能与您对程序在错误情况下应执行的操作的看法背道而驰,但问题不在于此。
我的问题是,由于任务引发异常,因此不会立即导致进程崩溃。一段时间后,当垃圾收集器明智地决定收集“未观察到”的异常时,它崩溃了。
我希望该过程立即崩溃,因为...
简而言之,问题是:
如何使我的进程从Task使用TPL创建的async崩溃,从而Windows错误报告能够创建有用的小型转储?
提前致谢!
如何在C#中使用AccessViolationException故意使应用程序崩溃?
我有一个使用非托管DLL的控制台应用程序,该DLL最终由于访问冲突异常而崩溃。因此,AccessViolationException在某些情况下,我需要故意抛出一个,以测试其行为。
除此之外,它必须是专门的,AccessViolationException因为catch块不会处理此异常。
令人惊讶的是,这不起作用:
public static void Crash()
{
throw new AccessViolationException();
}
Run Code Online (Sandbox Code Playgroud)
这都不是:
public static unsafe void Crash()
{
for (int i = 1; true; i++)
{
var ptr = (int*)i;
int value = *ptr;
}
}
Run Code Online (Sandbox Code Playgroud)