2017-01-17 12 views
12

다른 컴퓨터에서 컴파일 된 내 iOS 앱에 dylib가있는 프레임 워크가 있습니다. 나는 내 컴퓨터에서 소스를 체크 아웃하고 사용하여 소스 코드 경로를 매핑 lldb을 지시 시도 :Xcode의 바이너리 dylib에 소스 연결하기

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix 

를 아무 소용이 여전히 어셈블리를보고.

참고 # 1 : dylib는 Xcode의 동일한 버전에서 C++ 코드로 컴파일되었습니다.

참고 # 2 : 파일 경로가 디버그 정보에 포함되어 있는지 확인하기 위해 nm -pa /path/to/dylib을 사용했습니다. lldb는 어떤 이유로 든 작동하지 않습니다. https://medium.com/@maxraskin/background-1b4b6a9c65be

답변

4
: 나는 아래 짐 잉햄의 대답을 따라이 작업을 자동화하는 스크립트를 만들었습니다

감사

UPDATE는, 스크립트는 내가 쓴이 글의 요지 링크로 사용할 수 있습니다

한 시스템에서 빌드 된 코드를 디버깅하지만 다른 시스템에서 디버깅하려면 dSYM을 빌드하고 디버깅중인 시스템에서 사용할 수 있도록해야합니다. 아직 그 일을하지 않았다면 아무 일도 없을 것입니다.

다음으로 확인할 사항은 lldb가 dSYM을 선택하고 있다는 것입니다. 이 페이지는이 프로세스가 작동하는 방법에 대한 몇 가지 설명이 있습니다

http://lldb.llvm.org/symbols.html

을하지만 다른 모든 실패하면, 당신은 손으로 추가 add-dsym 명령을 사용할 수 있습니다.

가 여전히 해결되지 않은 문제가, 다음 dylib에 몇 가지 기호를 선택하고 할 경우

(lldb) image lookup -vn <SYMBOL_NAME> 

또는 교대로로드 dylib에 약간의 주소를 찾아 수행

(lldb) image lookup -va <ADDRESS> 

lldb가 dSYM을 발견하고 디버그 정보가 올바른 경우 출력 줄 중 하나가 "컴파일 장치"항목이어야합니다. 이것이 디버그 정보가 소스 파일의 경로라고 말합니다. 그 경로의 적절한 기반은 target.source-map에서 사용해야하는 것이다. 해당 항목이 표시되지 않으면 해당 컴파일 단위에 대한 디버그 정보가 어떻게 든 손실됩니다.

모든 것이 좋고 lldb에서 소스 파일을 볼 수 없다면 버그가 발생할 가능성이 높습니다 (이 경우 http://bugreporter.apple.com으로 버그를 신고하십시오).

+0

자세한 답장을 보내 주셔서 감사 드리며, 저는 실제로 dSYM이 누락되었습니다. 'add-dsym'을 사용하고 dSYM 경로를 지적한 다음,'image lookup -vn '을 사용하여 심볼 소스 코드 경로를 얻은 다음'settings set target.source-map/path/prefix '를 사용하여 매핑을 변경했습니다./i/got/from/lookup/path/prefix/on/my/machine'을 입력하십시오. –

+0

이것을 자동화하기 위해 http://lldb.llvm.org/symbols.html의 지침을 사용합니다. –

+0

btw - dylib의 디버그 빌드에서 dSYM이 필요하거나 dwarf 파일에 포함 된 동일한 데이터입니까? –