关于unity3d:如何使C#应用程序崩溃

您所在的位置:网站首页 使人崩溃的游戏名字 关于unity3d:如何使C#应用程序崩溃

关于unity3d:如何使C#应用程序崩溃

2024-07-12 22:16| 来源: 网络整理| 查看: 265

我想测试我的应用程序故障转储是否可以调试。 但是首先,我需要生成我的应用程序的崩溃转储。 我正在使用C#编写我的应用程序,并尝试了许多异常和不安全的代码等,但没有得到。

谢谢!

编辑:对不起,只是忘记了一些东西,我正在使用Unity3D制作应用程序,该程序会自动为我处理异常。

编辑2:谢谢大家的回答。 我已经在标准的C#应用程序中测试了您的建议,并且一切正常,但是在我的Unity3D应用程序(使用C#编写)中却没有。 似乎Unity3D需要付出更多努力才能导致崩溃,我可能会给Unity3D发送电子邮件以获得答案。 如果知道的话,我会在这里发布。 干杯!

相关讨论 恭喜,您似乎是最专业的程序员! int x = 0怎么样? 双倍= 5 / x; 对象obj = null; obj.ToString(); 当在运行时引发非托管异常时,只会发生崩溃。 背后没有任何魔术。 可能的问题是您的代码无法正常工作,这就是为什么您没有任何日志的原因。 这是什么样的应用程序? 强制抛出异常。 int [] x = {0}; int blah = x [2]; throw new Exception(); ...? 主板上的DIMM是否部分未安装? 也许这会有所帮助:stackoverflow.com/questions/1134048/ 这似乎是一个研究不足的问题

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

1System.Diagnostics.Debugger.Launch() 相关讨论 虽然这个问题很愚蠢,但是这个答案肯定是相反的,+ 1。 抱歉,我尝试,但是得到" NotImplementedException:所请求的功能未实现" 因为您说您正在Unity3D中进行开发,所以这可能不是一个选择,对不起...

StackOverflowException是一个坏蛋:

1234void PerformOverflow() {   PerformOverflow(); }

用法:

1PerformOverflow();

引发异常:)

1throw new Exception("Your exception here!");

相关讨论 抱歉,我尝试抛出异常,但这不会使我的应用程序崩溃。 抱歉,我丢失了一些东西:我使用Unity3d,它可以处理所有异常,只需在输出文件中向我展示这些异常即可。谢谢 这不是一个崩溃。仅当崩溃的本机代码或调用RaiseException Win32 API时,才会发生崩溃。

好。实际上使CLR崩溃的唯一100%好的方法是将本地异常注入到托管环境中。

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

1234567[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实例1是本机调试器,并使用Unity或C#程序作为主机程序,然后从另一个Visual Studio实例附加到主机程序。

相关讨论 您无需在要突出显示内容的任何时间进行SCREAM。使用斜体或粗体效果更好...只是说,因为即使在评论中看到您尖叫也很烦... 这是一种古老的习惯,例如当您始终与法律专家一起突出显示内容和重要句子时,使用大写锁定... 谢谢,这对我来说非常有效。该代码生成由Unity管理的应用程序崩溃。

对于Unity3D中的C#

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

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

AccessViolation

Cause a crash by performing an invalid memory access.The invalid memory access is performed on each platform as follows:

FatalError

Cause a crash using Unity's native fatal error implementation.

Abort

Cause a crash by calling the abort() function.

PureVirtualFunction

Cause a crash by calling a pure virtual function to raise an exception.

对于旧版本的Unity:

UnityEngine.Application.ForceCrash(int mode)

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

UnityEngine.Application.CommitSuicide(int mode)

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

这似乎与Smilediver在mode上的帖子一致:

0 - will simulate crash, 1 - will simulate a fatal error that Unity has caught, 2 - will call abort().

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

确保成功的方法如下:

1234ThreadPool.QueueUserWorkItem(new WaitCallback(ignored => {    throw new Exception(); }));

所有其他所有内容都可以由顶级ApplicationDomain.OnUnhandledException等进行处理。

这将杀死它(假定是.NET 2.0+,并且不使用" legacyUnhandledExceptionPolicy":http://msdn.microsoft.com/zh-cn/library/ms228965.aspx)。

相关讨论 似乎unity3d应用程序直接忽略了该异常(不像其他人那样处理它),并且没有任何反馈。 如果您想要更少的代码... ThreadPool.QueueUserWorkItem(ignored => throw new Exception()); ThreadPool.QueueUserWorkItem(_ => throw new Exception());更少 注意,只要使用UnityEngineApplication.logMessageReceivedThreaded(而不是logMessageReceived),Unity3d就会记录此异常。

另一种选择是打电话

1System.Environment.FailFast("Error happened") 相关讨论 可行,并具有成为系统库提供的预期方法的好处。 还用于测试崩溃的ASP.NET Core应用程序(大多数较高评级的选项似乎没有成功)-谢谢!

没有任何答案使我的应用程序崩溃。所以这是对我有用的方法。

123456    private void Form1_Load(object sender, EventArgs e)     {         object p = 0;         IntPtr pnt = (IntPtr)0x123456789;         Marshal.StructureToPtr(p, pnt, false);     } 相关讨论 使用此方法不能保证会崩溃。

123456  public void Loop()   {       Loop();   }   //call this   Loop();

如果您尝试转换一个空的游戏对象,复制起来就很容易了。例如,像这样:

12345public static GameObject gameObjectCrash; public void GenerateCrash() {     gameObjectCrash.transform.rotation = Quaternion.Euler(90, 0, 0); } 12 int[] x = {0};  int blah = x[2];

同样会导致异常

相关讨论 抱歉,我尝试抛出异常,但这不会使我的应用程序崩溃 抱歉,我丢失了一些东西:我使用Unity3d,它可以处理所有异常,只需在输出文件中向我展示这些异常即可。谢谢

使用下面的代码关闭应用程序。

1Environment.Exit(1);

退出需要一个名为exitcode的参数。如果exitcode = 0表示没有错误。提供非零的退出代码以反映错误。

相关讨论 这是CLOSING,不是崩溃



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3