2012-06-20 3 views
6

저는 최근에 iOS 앱의 오류 로그를 나타 내기 위해 문제가 발생했습니다. 어떤 이유로 dSYM의 UUID가 Spotlight에서 색인 생성되지 않았습니다. 몇 가지 수동 검색과 커맨드 라인 주문의 건강한 복용량 후, 나는 부분적으로 충돌 로그를 상징 관리.C++ 코드를 기호화 할 수 있습니까?

처음에는 dSYM이 불완전하거나 그와 비슷한 것일 수 있다고 생각했지만 실종 된 메서드 호출이 C++ 코드에서 발생한다는 것을 깨달았습니다.이 프로젝트는 C++ 라이브러리를 호출하는 Objective-C 응용 프로그램입니다 (via Objective-C++). Objective-C 코드를 다시 호출합니다 (다시 Objective-C++ 코드를 통해). 내가 놓친 전화는 구체적으로 C++에서 발생하는 것입니다.

그래서, 내 질문은 : 상징적 인 프로세스가 C++ 코드의 함수 호출을 해결할 수있는 방법이 있습니까? 어떤 특별 옵션을 설정해야합니까?

+0

주소를 남겨 두거나 _ZN7과 같은 것을 제공합니까? ...? – C0deH4cker

+0

아니, 당신이 그것을 참조하는 경우 이름 맹 글링 함수가 아닙니다. 14 MyApp를 \t 0x001001bc 0xfe000 + 8636 15 MyApp를 앱이 lldb' \t 0x00100174 0xfe000 + 8564 –

+0

당신이 경우', 당신이 당신의 C++ 이름으로 방법을 분해 할 수 있습니다 : 그것은 기본 주소와 오프셋입니까? 정적 라이브러리 바이너리를 가지고 있습니까? 아니면 프로젝트의 모든 것을 컴파일하고 있습니까? – nielsbot

답변

0

apple sdk와 함께 제공되는 유용한 프로그램 중 하나는 atos (주소 - 기호)입니다. 기본적으로 원하는 것은 다음과 같습니다.

atos -o myExecutable -arch armv7 0x(address here) 

해당 주소에서 기호의 이름을 인쇄해야합니다.

+0

ObjC에서 작동합니다. C++의 경우, 다음과 같은 결과가 나옵니다. 0x00261588 (MyApp에서) + 465932 –

+0

gdb에서 수행 할 작업 ... – C0deH4cker

+0

감사하지만 LLVM을 사용하고 있습니다. –

0

Objective-C에 정통하지는 않지만 C++ 코드가 심볼로 컴파일되고 있는지 확인해야합니다. 특히 C++ 코드를 컴파일 할 때 -rdynamic 및/또는 -g를 포함했는지 확인 했습니까?

+0

gcc의 플래그처럼 보입니다. LLVM에서 같은 것을 달성하는 방법을 알고 있습니까? –

+1

애플은 gcc와 clang의 백엔드로 LLVM을 사용한다. clang은 기본적으로 gcc와 같은 플래그를 사용합니다. 모든 코드가 디버그 레벨을 3으로 설정하여 컴파일되었는지 확인하십시오.'-g3'을 사용하십시오. 최적화 ('-O0')를 비활성화 할 수도 있습니다. – sfstewman

+0

@sfstewman 최적화 수준에는 아무 것도 없습니다. 충돌 후 기호화와 함께, 그것은 오히려 벗겨 낼 것입니다. clang에는'-g3'이없고'-g' 만 있습니다 –

0

을 시도 dwarfdump --lookup = 0xYOUR_ADRESS YOUR_DSYM_FILE

수동으로 각 ADRESS를 조회 (또는이 작업을 수행하는 스크립트를 작성)하지만 기호를 확인하는 경우 (당신의 dSym 파일이 크다 할 것이다 20MB를 말하는 것보다) 이것은 일을 할 것입니다.

관련 문제