我想测试我的应用程序崩溃转储是否可以调试,所以我需要首先生成我的应用程序的崩溃转储,但我用C#编写它,所以任何人都知道如何触发崩溃。(事实上我测试了很多例外,不安全的代码......,但是没有得到它)。谢谢----对不起,对不起,我刚刚失去了一些东西:我使用unity3d构建应用程序,它将自动处理异常,并在应用程序崩溃时为我生成崩溃转储
感谢所有人的答案,我只是在常见的c#应用程序和所有工作中测试所有方法,但不是用C#编写的unity3d应用程序,看来unity3d做得更多,我想我需要通过电子邮件发送unity3d来获得答案。如果我得到它,我会在这里发帖。
答案 0 :(得分:18)
以下内容将提供未处理的异常,并要求您选择调试器:
System.Diagnostics.Debugger.Launch()
答案 1 :(得分:11)
StackOverflowException
是一个坏蛋:
void PerformOverflow()
{
PerformOverflow();
}
用法:
PerformOverflow();
答案 2 :(得分:9)
抛出异常:)
throw new Exception("Your exception here!");
答案 3 :(得分:5)
一种可靠的方法如下:
ThreadPool.QueueUserWorkItem(new WaitCallback(ignored =>
{
throw new Exception();
}));
所有其他人都可以通过顶级ApplicationDomain.OnUnhandledException等处理。
这个会死掉它(假设是.NET 2.0+,而不是使用'legacyUnhandledExceptionPolicy':http://msdn.microsoft.com/en-us/library/ms228965.aspx)。
答案 4 :(得分:5)
好。实际崩溃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));
}
快乐崩溃。请注意,为了调试本机和托管,您需要运行两个Visual Studio实例。如果您正在开发本机P / INVOKE插件,请将其设置为Visual Studio Instance 1是本机调试器,并将Unity或您的C#程序用作Host程序,并从另一个Visual Studio实例附加到Host程序。
答案 5 :(得分:4)
对于 Unity3D
中的C#有UnityEngine.Diagnostics.Utils.ForceCrash
(在Unity 2018.3中)
这可以与以下ForcedCrashCategory
枚举参数之一一起使用:
AccessViolation
通过执行无效的内存导致崩溃 访问。无效的内存访问在每个平台上执行为 如下:
FatalError
使用Unity的本机致命错误导致崩溃 实施。
中止
通过调用abort()函数导致崩溃。
PureVirtualFunction
通过调用纯虚函数导致崩溃 引发异常。
对于Unity的较旧版本:
UnityEngine.Application.ForceCrash(int mode)
对于更旧的版本(Unity 5):
UnityEngine.Application.CommitSuicide(int mode)
根据我的经验,模式0导致“统一处理”崩溃(出现Unity崩溃对话框),模式2导致“硬”崩溃,出现Windows错误对话框。
这似乎与mode
上的this post by Smilediver一致:
0-将模拟崩溃,1-将模拟致命错误,Unity 已经抓到2-会调用abort()。
(未记录这些方法,因为它们仅供Unity内部使用。根据您的Unity版本,它们也可能标记为[Obsolete]
。)
答案 6 :(得分:1)
没有一个答案按照我要求的方式崩溃了我的应用程序。所以这是适合我的方法。
private void Form1_Load(object sender, EventArgs e)
{
object p = 0;
IntPtr pnt = (IntPtr)0x123456789;
Marshal.StructureToPtr(p, pnt, false);
}
答案 7 :(得分:0)
public Object crashMe()
{
return null;
}
// call me!
crashMe().ToString();
不应该只创建一个简单的NullPointer并使你的应用程序崩溃吗?
答案 8 :(得分:0)
int[] x = {0};
int blah = x[2];
也会引起异常
答案 9 :(得分:0)
public void Loop()
{
Loop();
}
//call this
Loop();
答案 10 :(得分:0)
如果您尝试转换空游戏对象,则复制起来很容易。例如,像这样:
public static GameObject gameObjectCrash;
public void GenerateCrash()
{
gameObjectCrash.transform.rotation = Quaternion.Euler(90, 0, 0);
}
答案 11 :(得分:0)
另一种选择是致电
System.Environment.FailFast("Error happened")
答案 12 :(得分:0)
我认为早期的统一版本中有一个代码,比如
Application.commitSuicide(number Input);
现在被替换为
Application.ForceCrash(number input);
到目前为止,我不知道不同的数字在数字输入中有什么作用,但对我来说,
Application.ForceCrash(1);
完成工作。
答案 13 :(得分:-2)
使用以下代码关闭应用程序。
Environment.Exit(1);
Exit需要一个名为exitcode的参数。如果exitcode = 0则表示没有错误。提供非零退出代码以反映错误。