2013-08-01 133 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管理的應用程序崩潰。 –