2014-12-29 1 views
2

우리가 알아낼 수없는 맵 기반 iOS 앱에서 이상한 충돌이 나타납니다. 기본적으로 몇 가지 포인트로 반복 코드 반복의 다음 행, 충돌 로그에서 100 배 이상 :VectorKit MapKit 스택 오버플로 충돌

6 VectorKit      0x000000019050c6f8 __86-[VKMapCameraController _animateToPosition:pitch:yaw:duration:timingCurve:completion:]_block_invoke347 + 40 
7 VectorKit      0x0000000190485a30 -[VKAnimation _stopAnimation:] + 140 
8 VectorKit      0x0000000190488b20 -[VKMapCameraController setYaw:animated:] + 100 
9 MapKit       0x000000018540263c -[MKMapView snapToNorth:] + 148 

마지막으로 호출하기 전에하십시오 EXC_BAD_ACCESS KERN_PROTECTION_FAILURE와

0 CoreFoundation     0x0000000183251e38 _CFArrayReplaceValues + 152 
1 CoreFoundation     0x000000018332876c __CFRepositionTimerInMode + 108 
2 CoreFoundation     0x000000018332876c __CFRepositionTimerInMode + 108 
3 CoreFoundation     0x0000000183272630 CFRunLoopTimerSetNextFireDate + 580 
4 MapKit       0x00000001853e8588 -[MKMapView _didChangeRegionMidstream:] + 196 
5 MapKit       0x0000000185404e90 -[MKMapView mapLayer:didChangeRegionAnimated:] + 60 

_CGArrayReplaceValues ​​충돌 0x000000016fccbef0 오류에 .

저는이 충돌 보고서의 메소드를 직접 호출하지 않기를 바랍니다. 실제로 VectorKit은 완전히 사적인 Apple 프레임 워크입니다. 우리가 응용 프로그램에서 원격으로 수행하는 유일한 작업은 사용자가 주석을 탭하여 해당 주석을 가운데에 놓은 후 기본 setRegion : animated : 메소드를 호출하는 것입니다. 이것은 iOS 8에서만 발생하는 것으로 지적 할만한 가치가 있습니다. iOS 7의 단일 충돌은보고되지 않았습니다. 어떤 도움에 감사드립니다 http://crashes.to/s/f09eb96c753

: 여기

전체 충돌 보고서에 대한 링크입니다. 고맙습니다.

+0

은 무한 재귀로 인해 스택 오버플로와 비슷한 것으로 들리며 문제 코드는 "finally"비트 어딘가에 있습니다. MKMapView를 하위 클래스로 만들었습니까? – nielsbot

+0

아니요 MKMapView를 하위 클래스로 만들지 않았습니다. 우리는 MKMapView의 델리게이트 메서드 만 사용합니다. 그리고 사용자가 주석을 두드리면 기본 setRegion 메소드를 호출하거나, 너무 크게 확대하면 줌아웃합니다. 그러나 너무 멀리 확대 된 경우에도 임계 값을 넘어서 축소합니다. 나는. 고도가 100보다 작 으면지도의 까다로운 동작을 피하기 위해 115로 축소합니다. – Kevin

+0

대리자 메서드를 변경하지 않고 아무 일도 수행하지 않으면 어떻게됩니까? – nielsbot

답변

2

NSZombieEnabled을 사용해보세요. 사용 가능하게되면 객체가 보유 수 0에 도달하면 할당 해제되지 않고 NSZombie 인스턴스로 변형됩니다. 좀비가 메시지를 받으면 예측할 수없는 방식으로 충돌하거나 행동하지 않고 경고를 기록합니다.

내가이 iOS 만 8 충돌하지 아이폰 OS 7을하지만 EXC_BAD_ACCESS 신호가 시스템 호출에 잘못된 포인터를 전달하는 결과입니다 이유를 정말 잘 모르겠어요 아주 솔직히 말해서, 그래서 당신은 역 참조 될 수있다 어딘가에 널 포인터.

위의 NSZombieEnabled로 문제가 발견되지 않으면 정적 분석기을 사용해보십시오.

+0

분석기에 아무런 문제가 없습니다. 확실히 메모리 문제는 아닙니다. 애플 코드에서 무한 루프로 인해 스택 오버플로가 발생하여 EXC_BAD_ACCESS 오류가 발생합니다. 나는 끝없는 반복문이 어떻게 입력되었는지, 왜 계속 진행되는지 전혀 모른다. 크래시 로그는 스택이 어떻게 시작되었는지를 충분히 파악하지 못합니다. – Kevin