나는 (절단) 다음과 같은 충돌 보고서를받은@ try/@ catch 블록에서 어떻게 충돌 했습니까?
Exception Type: EXC_CRASH (SIGSEGV)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x36df00d8 __psynch_mutexwait + 24
1 libsystem_c.dylib 0x31760674 pthread_mutex_lock + 376
2 CoreFoundation 0x31f2338a CFRunLoopWakeUp + 50
3 WebCore 0x308d0bc8 _WebThreadRun + 284
4 UIKit 0x37921c7a -[UIWebDocumentView _runLoadBlock:] + 38
5 UIKit 0x37921c3a -[UIWebDocumentView _cleanUpFrameStateAndLoad:] + 114
6 UIKit 0x37921bbe -[UIWebDocumentView loadHTMLString:baseURL:] + 78
우려가 호출 코드는 다음과 같습니다이다 :
@try {
[webView loadHTMLString:htmlString baseURL:nil];
[webView setNeedsDisplay];
}
@catch (NSException *exception) {...}
그래서, 어떻게 예외 내에서 예외를 던질 관리 않았다 매니저?
나는 catch 내부에서 던지기 메서드를 호출하지 않았습니다. 내가하고있는 일은 예외, webView 및 htmlString을 NSLog에 덤핑하는 것뿐입니다. 그들이 예외를 일으키는 경우 충돌 스택이 다르게 보일 것으로 예상됩니다.
잠재적 인 OS 버그로 축소되는 것으로 보입니까?
오케이 ... 그건 의미가 있습니다. 호출은 죽어가는 스레드에서 호출 될 수있는 함수에 있습니다. 메소드를 보호하여 메인 스레드에서 자신을 호출하는지 확인했습니다. 이것은 스레드로 보내진 문자열이 스레드 된 호출자가 끝나고 살아남을 때까지 살아남지 않는다고 보장하지 않습니다. 특히 감사합니다. 나는 segfault가 예외 처리와 함께 잡힐 수 있다고 생각했다. 나는 지식에 감사드립니다. –
세그먼트 오류는 신호이며 OS에서 응용 프로그램으로 전송합니다. 그들은 시그널 핸들러에 의해 "잡힐"수있다. (signal() C 함수를 보라). 세그먼트 처리 오류는 신호 처리기에서 관리 할 수 있습니다. 일반적으로 디버깅을 제외하고는 앱을 일관성없는 상태로 둡니다. – Macmade