如何使C#应用程序崩溃

fie*_*hao 10 c# crash unity-game-engine

我想测试我的应用程序崩溃转储是否可以调试,所以我需要首先生成我的应用程序的崩溃转储,但我用C#编写它,所以任何人都知道如何触发崩溃.(实际上我测试有很多例外,不安全的代码......,但不要得到它).谢谢----对不起,对不起,我刚刚失去了一些东西:我使用unity3d构建应用程序,它将自动处理异常,并在应用程序崩溃时为我生成故障转储

谢谢大家的答案,我只是测试你所有的方法在常见的c#应用程序和所有的工作,但不是用C#编写的unity3d应用程序,似乎unity3d做得更多,我想我需要通过电子邮件发送unity3d来得到答案.如果我得到它,我会在这里发布.

Gia*_*los 21

以下将提供未处理的异常,并要求您选择调试器:

System.Diagnostics.Debugger.Launch()
Run Code Online (Sandbox Code Playgroud)


Ond*_*dar 13

StackOverflowException 是一个坏蛋:

void PerformOverflow()
{
  PerformOverflow();
}
Run Code Online (Sandbox Code Playgroud)

用法:

PerformOverflow();
Run Code Online (Sandbox Code Playgroud)


小智 10

抛出异常:)

throw new Exception("Your exception here!");
Run Code Online (Sandbox Code Playgroud)


son*_*nny 8

对于Unity3D 中的C#

UnityEngine.Diagnostics.Utils.ForceCrash(在 Unity 2018.3 中)

这可以与以下ForcedCrashCategory枚举参数之一一起使用:

访问违规

通过执行无效内存访问导致崩溃。 无效内存访问在每个平台上执行如下:

致命错误

使用 Unity 的本机致命错误实现导致崩溃。

中止

通过调用 abort() 函数导致崩溃。

纯虚拟函数

通过调用纯虚函数引发异常导致崩溃。


对于旧版本的 Unity:

UnityEngine.Application.ForceCrash(int mode)

对于更旧的版本(Unity 5):

UnityEngine.Application.CommitSuicide(int mode)

根据我的经验,模式 0 会导致“统一处理”崩溃(出现 Unity 崩溃对话框的地方),模式 2 会导致“硬”崩溃,出现 Windows 错误对话框。

这似乎一致这篇文章由Smiledivermode

0 - 将模拟崩溃,1 - 将模拟 Unity 捕获的致命错误,2 - 将调用 abort()。

(这些方法没有记录在案,因为它们是供 Unity 内部使用的。它们也可能[Obsolete]根据您的 Unity 版本进行标记。)


max*_*630 7

另一种选择是致电

System.Environment.FailFast("Error happened")
Run Code Online (Sandbox Code Playgroud)


Mar*_*wul 5

一个可靠的方法如下:

ThreadPool.QueueUserWorkItem(new WaitCallback(ignored => 
{
   throw new Exception();
}));
Run Code Online (Sandbox Code Playgroud)

所有其他人都可以通过顶级ApplicationDomain.OnUnhandledException等处理.

这个会死掉它(假设是.NET 2.0+,而不是使用'legacyUnhandledExceptionPolicy':http://msdn.microsoft.com/en-us/library/ms228965.aspx).


Пет*_*ров 5

好.唯一好的100%方式实际崩溃CLR是将一个本机异常注入托管世界.

直接调用Kernel32.dll的RaiseException()会立即崩溃任何C#应用程序和Unity Editor.

[DllImport("kernel32.dll")]
static extern void RaiseException(uint dwExceptionCode, uint dwExceptionFlags,  uint nNumberOfArguments, IntPtr lpArguments);

void start()
{
    RaiseException(13, 0, 0, new IntPtr(1));
}
Run Code Online (Sandbox Code Playgroud)

快乐崩溃.请注意,为了调试本机托管,您需要运行两个Visual Studio实例.如果您正在开发本机P/INVOKE插件,请将其设置为Visual Studio Instance 1是本机调试器并使用Unity或您的C#程序作为Host程序,并从另一个Visual Studio实例连接到Host程序.

  • 这是一个老习惯,就像当您总是使用法律术语来突出显示内容和重要句子时,您使用大写锁定... (2认同)