进一步:BSD信号和异常同时捕获
生活随笔
收集整理的這篇文章主要介紹了
进一步:BSD信号和异常同时捕获
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
void SignalHandler(int signal)
{
//中斷信號
}
void uncaughtExceptionHandler(NSException *exception)
{
//未捕獲異常
}
{
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);
}
{
self.finishPump = NO;
CFRunLoopRef runLoop = CFRunLoopGetCurrent();
CFArrayRef runLoopModesRef = CFRunLoopCopyAllModes(runLoop);
NSArray * runLoopModes = (NSArray*)runLoopModesRef;
while (self.finishPump == NO)
{
for (NSString *mode in runLoopModes)
{
CFStringRef modeRef = (CFStringRef)mode;
CFRunLoopRunInMode(modeRef, 1.0f/120.0f, false); // Pump the loop at 120 FPS
}
}
CFRelease(runLoopModesRef);
}
{
//中斷信號
}
void uncaughtExceptionHandler(NSException *exception)
{
//未捕獲異常
}
安裝(與全局異常斷點沖突,當有這樣的斷點是,下面攔截函數失效)
void InstallUncaughtExceptionHandler(){
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);
}
3.具體實例
1.http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html
重點在于嘗試繼續運行程序
告訴用戶那些因為這些未攔截的異常和信號導致的崩潰,或者自己記錄,甚至可以避開這樣導致的崩潰.不過,如果多個信號攔截了,這可能失效.
非常推薦看看這篇文章
2.http://parveenkaler.com/2010/08/11/crashkit-helping-your-iphone-apps-suck-less/
重點在于記錄異常(之后返回主線程)
- (void)pumpRunLoop{
self.finishPump = NO;
CFRunLoopRef runLoop = CFRunLoopGetCurrent();
CFArrayRef runLoopModesRef = CFRunLoopCopyAllModes(runLoop);
NSArray * runLoopModes = (NSArray*)runLoopModesRef;
while (self.finishPump == NO)
{
for (NSString *mode in runLoopModes)
{
CFStringRef modeRef = (CFStringRef)mode;
CFRunLoopRunInMode(modeRef, 1.0f/120.0f, false); // Pump the loop at 120 FPS
}
}
CFRelease(runLoopModesRef);
}
?
轉載于:https://blog.51cto.com/realwizard/912920
總結
以上是生活随笔為你收集整理的进一步:BSD信号和异常同时捕获的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做产品:光有换位思考还不够
- 下一篇: 使用UtraISO为U盘制作系统启动盘