2017-03-14 2 views
4

dsym 파일이없는 iOS 오류 보고서를 나타냅니다. 나는 좋은 file_name을 얻을 수 없을 것이라는 것을 안다 : 줄 번호 symbolication 그러나 코드의 어셈블리 부분에서 어디에서 충돌이 발생했는지 알아내는 것이 좋다. 내가 바이너리 해독 및 충돌 보고서와 진 경기에서 UUID의의를 확인했습니다dsym이없는 iOS 충돌 보고서 기호 - 기호 주소가 바이너리에 표시된 주소 외부입니다.

Thread 3 name: Dispatch queue: com.unity3d.WebOperationQueue :: NSOperation 0x1483250e0 (QOS: USER_INTERACTIVE) 
Thread 3 Crashed: 
0 myapp      0x0000000100ec4738 0x100080000 + 14960440 
1 myapp      0x000000010120e0fc 0x100080000 + 18407676 
2 myapp      0x00000001011d7e00 0x100080000 + 18185728 
3 myapp      0x0000000100085cfc 0x100080000 + 23804 
4 CFNetwork     0x0000000185027780 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 80 
... 

: 시작하기

, 여기에 추락 스레드의 스택 추적입니다. 수동으로 스택 주소를 symbolicate하기 위해,이

atos -arch arm64 -o myapp -l 0x100080000 0x0000000100ec4738 

을하고 나는 내가 dsym 파일이 없기 때문에이 부분적으로 예상된다

0x0000000100e44738 (in myapp) + 544 

으로 위의 명령의 출력을 얻을. 우리가 계산하는 경우

0x0000000100e44738도 얻을 수 있습니다

symbol address as = (slide + stack - load address)

슬라이드 ATOS 반환 주소 위와 그래서 0x0000000100000000 + 0x0000000100ec4738 - 0x100080000 = 0x100e44738 같은 0x0000000100000000 (otool -arch arm64 -l myapp | grep -B 3 -A 8 -m 2 "__TEXT"에서 vmaddr로 발견)

입니다.

이제 문제는 내가 otool 명령 위의 명령의 시작은 다음과 같습니다

otool -tvV myapp 

아래 사용 얻으 바이너리의 텍스트 섹션에서 주소에서 0x100e44738 기호 주소를 찾을 수 없습니다입니다.

myapp: 
(__TEXT,__text) section 
__ZNK5physx14NpSceneQueries10multiQueryINS_12PxRaycastHitEEEbRKNS_15MultiQueryInputERNS_13PxHitCallbackIT_EENS_7PxFlagsINS_9PxHitFlag4EnumEtEEPKNS_12PxQueryCacheERKNS_17PxQueryFilterDataEPNS_21PxQueryFilterCallbackEPNS_20BatchQueryFilterDataE: 
0000000101262f40 stp x28, x27, [sp, #-96]! 
0000000101262f44 stp x26, x25, [sp, #16] 
0000000101262f48 stp x24, x23, [sp, #32] 
0000000101262f4c stp x22, x21, [sp, #48] 
0000000101262f50 stp x20, x19, [sp, #64] 
0000000101262f54 stp x29, x30, [sp, #80] 
... 

우리는 명확하게 otool -tvV (0x101262f40)에서 시작 주소가 symbol address (0x100e44738)보다 큰 볼 수 있습니다. 그래서 내가 놓친 것을 발견 할 수 없거나 여기에서 어떻게 나아갈 지 알 수 없다.

이 스택 추적은 SIGSEGV 예외를위한 것이므로 변경 사항이 있는지 확실하지 않습니다. SIGABRT 예외가있는 다른 샘플 응용 프로그램에서 수동 기호화의 정확한 단계를 시도했지만 어셈블리에서 정확한 줄을 알 수있었습니다.

모든 도움말이나 의견을 보내 주시면 감사하겠습니다.

답변

1

나는 NSURLConnection의 문제인 것처럼 보입니다. 대개 dealloc에서 제대로 설정되지 않은 대리자가 있다는 것을 의미합니다 (NSURLConnection은 할당 됨 - weak가 아니므로 직접 수동으로 설정해야 함). 코드에서 NSURLConnection 또는 코드와 같은 다른 네트워킹을 사용하는 장소를 찾습니다. 사용자가 페이지를 떠날 때보기가 종종 메모리를 남기기 때문에 네트워크 요청 대리자로 자신을 설정하는 view 또는 viewController를 특히 염두에 두어야합니다.

+0

감사합니다. NSURLConnection의 콜백이 문제를 일으키는 것 같습니다. 델리게이트가 dealloc 할 때 이미 NSURLConnection 객체를 nil로 설정했습니다. 물론 NSURLConnection의 대리자를 nil에 설정하지 않으려는 것이지만 위임 속성이 없으므로 그렇게 할 수 없습니다. – Ravi