2012-06-01 3 views
3

메인 메서드에 모든 NSExceptions를 로깅하는 것 외에 다른 오류 메시지를 캡처해야하는 곳은 어디입니까? 예 : 과도하게 릴리스 된 객체에 액세스하여 내 앱이 다운되는 경우 어떻게 충돌에 대한 모든 사용 가능한 정보를 가져와 장치의 로컬 파일에 기록 할 수 있습니까? XCode에서이 작업을 수행하는 방법을 알고 있지만 오프 사이트 QA 테스터로부터이 정보를 얻을 필요가 있습니다.iOS : 앱이 충돌 할 때 모든 오류 데이터를 어떻게 캡처합니까?

이러한 메모리 오류가 발생하면 주 메쏘드에 의해 캐치되지 않습니다.

답변

3

이 작업을 실제로 수행하는 것은 실제로 어렵습니다. 시스템이 정의되지 않은 상태에 있음을 의미하는 충돌이 발생했습니다. 작은 오류로 인해 전체 교착 상태가 발생할 수 있습니다 (예 : 힙이 잠긴 상태에서 충돌 한 다음 더 많은 메모리를 할당하려는 경우). 빌드하고 디버깅하는 학습 경험을 찾고 있지 않다면 기존 프레임 워크를 다시 사용해야합니다. 가장 좋은 IMO는 PLCrashReporter이며 많은 반복을 거쳐 현재 상태가됩니다. 심지어 자신의 서버 (여러 상용 솔루션 포함)의 오류보고 관리를 위해 QuincyKit과 잘 통합됩니다.

직접 작성하기로 결정했다면 (필자는 언급하지 않았습니까?) 우선 PLCrashReporter를 연구하여 어떻게 수행하는지 확인하십시오. 가장 중요한 규칙이 하나있는 경우 크래시 중 가능한 적은 작업을 수행 한 후 다음 출시 과정에서 복잡한 처리를 처리합니다.

1

this post에있는 정보는 아마도 도움이됩니다.

NSSetUncaughtExceptionHandler(&HandleException); 
signal(SIGABRT, SignalHandler); 
signal(SIGILL, SignalHandler); 
signal(SIGSEGV, SignalHandler); 
signal(SIGFPE, SignalHandler); 
signal(SIGBUS, SignalHandler); 
signal(SIGPIPE, SignalHandler); 

게시물의 나머지는 다음을 설정하는 방법을 설명합니다 : unhanded 예외 또는 신호가

을 충족 될 때 기본적으로, 당신은 목표 - C의 기능을 설정할 수는

이런 식으로 뭔가를 보이는 호출 할 메소드 (HandleException 및 SignalHandler).

+2

어떤 objective-c 코드를 호출해도 비동기 안전하지 않으며 교착 상태와 같은 주요 문제가 발생할 수 있으므로이 작업을 수행하면 안됩니다. http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912. html 더 나은 사용 PLCrashReporter @ rob-napier에 의해 언급 – Kerni

관련 문제