2013-08-01 100 views
4

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

感谢所有您的答案,我只是测试你的所有方法在普通的c#应用程序和所有的作品中,但不是用C#编写的unity3d应用程序,它似乎unity3d做得更多,我想我需要发送电子邮件unity3d来获得答案。我会在这里发布,如果我得到它。

+10

恭喜你,你似乎是最专业的程序员! – WarrenFaith

+0

int x = 0; double blah = 5/x; –

+1

object obj = null; obj.ToString(); –

回答

0
public Object crashMe() 
{ 
    return null; 
} 

// call me! 
crashMe().ToString(); 

不应该只是创建一个简单的NullPointer并导致您的应用程序崩溃吗?

+2

我不认为OP正在寻找这种崩溃:他想让进程崩溃以生成崩溃转储,而不是让程序崩溃以生成堆栈跟踪。 – dasblinkenlight

+0

嗯......他说“应用程序崩溃”。无论如何,有很多不同的“解决方案”提到... – WarrenFaith

+0

我用unity3d构建应用程序,如果应用程序崩溃,它将自动生成崩溃转储,所以我想要做的只是使应用程序崩溃。 – fieldChao

18

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

System.Diagnostics.Debugger.Launch() 
+0

虽然这个问题很愚蠢,但这个答案绝对是相反的,+1。 –

+0

,我会试试看,感谢所有 – fieldChao

+0

对不起,我尝试,但得到“NotImplementedException:请求的功能未实现” – fieldChao

10

抛出一个异常:)

throw new Exception("Your exception here!"); 
+0

对不起,我已经尝试抛出一个异常,但是这不会使我的应用程序崩溃。 – fieldChao

+0

对不起,我失去了一些东西:我使用Unity3d,它处理所有异常,只显示输出文件中的异常。谢谢 – fieldChao

+0

默认情况下,如果您在“任务”中,它将无法正常工作。 –

1
int[] x = {0}; 
int blah = x[2]; 

将导致异常一样好

+0

对不起,我已经尝试抛出一个异常,但是这并没有使应用程序崩溃 – fieldChao

+0

抱歉,我失去了一些东西:我使用Unity3d,它处理所有异常,只显示输出文件中的异常。谢谢 – fieldChao

5

确实如此:

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

所有的人可以通过顶层ApplicationDomain.OnUnhandledException等来处理。

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

+0

哦,谢谢,我会尽快尝试 – fieldChao

+0

看来unity3d应用程序直接忽略异常(不像其他人那样处理),并且没有任何反馈。 – fieldChao

-2

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

Environment.Exit(1);  

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

+0

这是关闭,不是崩溃 –

7

StackOverflowException是一个坏蛋:

void PerformOverflow() 
{ 
    PerformOverflow(); 
} 

用法:

PerformOverflow(); 
1

的答案都不坠毁我的应用我一直在寻找的路上。所以这里是适合我的方法。

private void Form1_Load(object sender, EventArgs e) 
    { 
     object p = 0; 
     IntPtr pnt = (IntPtr)0x123456789; 
     Marshal.StructureToPtr(p, pnt, false); 
    } 
+0

使用此功能不保证崩溃。 –

0
public void Loop() 
    { 
     Loop(); 
    } 
    //call this 
    Loop(); 
4

嘛。唯一不错的100%实际崩溃CLR是将本地异常注入托管的世界。

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

[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实例附加到主机程序。

+0

任何时候你都不需要惊讶地点亮东西。更好地使用斜体或大胆的作品...只是说,因为它很烦人,甚至在评论中看到你尖叫... – WarrenFaith

+1

这是一个古老的习惯,就像你总是用法律术语来突出东西和重要句子一样,你使用大写锁定... –

+0

谢谢,这对我来说非常合适。该代码生成Unity管理的应用程序崩溃。 –