2012-03-27 418 views

回答

3

Core Foundation有一個宏觀HALT應該做的伎倆,如果你真的真的認爲有必要做到這一點:

#if defined(__ppc__) 
    #define HALT do {asm __volatile__("trap"); kill(getpid(), 9); } while (0) 
#elif defined(__i386__) || defined(__x86_64__) 
    #if defined(__GNUC__) 
     #define HALT do {asm __volatile__("int3"); kill(getpid(), 9); } while (0) 
    #elif defined(_MSC_VER) 
     #define HALT do { DebugBreak(); abort(); } while (0) 
    #else 
     #error Compiler not supported 
    #endif 
#endif 
#if defined(__arm__) 
    #define HALT do {asm __volatile__("bkpt 0xCF"); kill(getpid(), 9); } while (0) 
#endif 
+0

這些都很好,但有一些問題。 asm指令基本上是斷點生成器,如果你希望附加一個調試器,這很好,但也許不是你想要的東西(例如:在windows上它會默認觸發一個崩潰/調試對話框)。噢,一個叫做abort()的MSC可以,但是仍然比TerminateProcess()擁有更多的基礎設施/殘留() – Joe 2012-03-27 23:07:00

+0

@Joe:我不認爲以任何方式做這件事都是一個好主意。 CF只使用這個宏來致命錯誤。就我而言,這個問題的正確答案是「是的,但你不應該」。請注意,我沒有寫這些,而且它們正在被使用。 – 2012-03-27 23:10:43

+0

這個技巧很好!謝謝! @Joe:斷點生成器對我來說是完美的*。 – andyvn22 2012-03-27 23:18:39

1

如果您使用的是Macintosh應用程序,「[[NSApp sharedApplication] terminate: self]」將起作用。

通過iPhone,你甚至可以做「exit(-1)」,但蘋果將接受突然或以任何方式終止用戶以外殺死自己的應用程序的所有應用。 Here is a related question with some useful answers for you

0

假設你不喜歡的exit()或_exit( ),其中有一些清理工作的語義,你可以使用S

#include <signal.h> 

kill(getpid(), SIGKILL); 

去,如果你使用的是Windows(假設沒有因爲「可可」的標籤),您可以使用

TerminateProcess(GetCurrentProcess(), -1); 

這是非常苛刻的,所以事情應該是非常糟糕的做到這一點。