关于unity3d:如何使C#应用程序崩溃 |
您所在的位置:网站首页 › 使人崩溃的游戏名字 › 关于unity3d:如何使C#应用程序崩溃 |
我想测试我的应用程序故障转储是否可以调试。 但是首先,我需要生成我的应用程序的崩溃转储。 我正在使用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 |