2013-06-06 4 views
0

"열거되는 동안 컬렉션이 변형되었습니다."라는 주기적으로 트리거하는 앱이 있습니다. 예외. 예외의 빈도는 장치에 따라 다를 수 있습니다.__NSFastEnumerationMutationHandler 호출자 찾기

throw되는 모든 예외에서 중단 점을 설정했지만 예외가 발생하면 __NSFastEnumerationMutationHandler와 호출하는 어셈블리 코드 만 얻습니다. 수정되는 __NSArrayM의 메모리 주소를 얻지 만 이것을 배열의 이름이나 내용으로 리버스 엔지니어링하는 방법을 알 수는 없습니다. lldb에 image lookup --address 0x20087d10 (예외 인쇄 주소)을 입력하면 출력이 표시되지 않습니다. $r0은 나에게 예외 객체를 주지만, po [$r0 callStackSymbols]po [$r0 callStackReturnAddresses]은 모두 nil을 반환합니다.

또한 코드를 트리거하는 부분을 결정하는 방법을 알 수 없습니다. 예외 브레이크 포인트에 도달 할 때의 응용 프로그램 스레드 내용은 인시던트마다 다르며 콜렉션 객체에 대한 명백한 액세스는 포함하지 않습니다.

어떤 컬렉션이 변경되고이 예외가 트리거되는지 파악하려면 어떻게해야합니까?

+0

,의 원인 오류는 NSURLProtocol 하위 클래스를 불필요하게 등록하고 제거하는 것이 었습니다. 웹 요청이 일치하는 프로토콜에 대해 CoreFoundation 검색을 트리거하는 동안 그렇게했을 때이 예외가 발생했습니다. – Arkaaito

답변

0

나는 lldb 명령 줄에서 메모리 주소를 직접 참조 할 수 있으므로, po 0x20087d10은 0x20087d10에있는 개체의 설명을 인쇄하기에 충분합니다.

(당신이 마지막으로 당신이 마지막으로 그림을, 스스로를 포기하고 StackOverflow의에 게시에 StackOverflow의 머피의 법칙 ....)에 의해으로하고, 호기심에 대한

관련 문제