2013-07-03 3 views
0

이 코드는 필자가 지금까지 본 실행 코드 중 가장 큰 단일 조각이라는 측면에서 분명히 중요합니다.liblldb-core.a는 실제로 763MB 크기 여야합니까?

enter image description here

이 지금 여기 내 맥에 내장이 모든 일을 얻기 위해 좀 더 쉽게했다 (나뿐만 아니라 리눅스에 LLDB 구축을 위해 노력하고 있고, 현재 내가 거기 파이썬에 링크와 함께 싸우고) 감사하지만,이 놀랍게도 큰 실행 파일은 나를 두 번째로 추측합니다 ... 내가 잘못 했습니까? 이 거대한 아카이브의 내부는 무엇입니까?

나는 이것을 실행 않았다

% otool -TV liblldb-core.a 

이 파일을 객체 350 + 주위를두고 출력의 1159 개 라인을 생산하고 있습니다. XCode 프로젝트가 약 350 개의 소스 파일을 통해 작동한다는 것을 알았습니다.

내 질문에 LLDB가 이런 식으로 작동하는 이유는 무엇일까? 왜 더 가볍지 않고 왜 LLVM과 Clang 코드에 링크하지 않는가? 또는이 아카이브의 내용이 이미 모든 LLDB 관련 코드입니까? 나는 디버거를 만드는 것이 꽤나 착수되었음을 인정하지만, 이것은 정직하게 생각할 만하다.

나는 -O3에서 컴파일하는 것이 실행 파일 크기를 늘리는 것으로 알고 있습니다. 나는 다시 돌아가서이 괴물을 재 컴파일하려고하지는 않는다. (컴퓨터는 106도 C만큼 높은 CPU 코어 temps를보고하는 smcFanControl과 거의 녹아있다.)

업데이트 : 나는 일종의 난 그냥 over here을했던 몇 가지 추가 학습이 ... 난 아직도 XCode.app의 내부 종류의 괴물 liblldb - core.a 또는 아무것도 찾을 수없는거야, 그리고 난 역사에 이 모든 것이 어떻게 작동하는지 아직도 조금 혼란 스럽습니다.

답변

1

liblldb-core.a의 실제 문제는 디버그 정보입니다. 750MB 중 약 720MB가 DWARF입니다. (직접 테스트 할 수 있습니다. 디렉토리에 ar x liblldb-core.a을 넣은 다음 strip -S *.o을 입력하면 .o 파일이 약 32MB가됩니다.) 실제 유형을 사용하지 않는 DWARF는 C++ 프로그램에서 불쾌감을줍니다.

필자는 (박탈 한) LLDB 프레임 워크와 lldb 드라이버 프로그램을 .tar.gz으로 만들 수 있습니다. 압축률은 약 10MB 정도입니다. lldb에 필요한 llvm 및 clang 비트 모두를 링크 한 후입니다. . 중간 단계가 미친 것처럼 보일지라도, 특히 여기에 어이없는 것은 없습니다.

1

제가 사용했던 빌드 구성 때문에 잠재적으로 엄청나다는 것을 나타내는 Debug 빌드 디렉토리에서 첫 번째 스크린 샷을 찍었습니다.

편집 : 아니요, 그 대답은 아닙니다. 릴리스 디렉토리에는 실제로 다른 파일보다 약간 큰 liblldb-core.a이 포함되어 있습니다.

이 거대한 700MB 아카이브는 일종의 "부작용"파일 인 것처럼 보입니다. 프로젝트를 보관할 때 369MB .xarchive 파일이 생성되었습니다. 나는 이것이 여기 "내용"의 더 나은 표현이라고 확신합니다.

enter image description here

: 그것은 조금 더 의미가이 상황을보고, 좋아,

오 : 난 아직도 기본적으로

업데이트 ... 어둠 속에서 그 위에 걸림돌로이 물건을 배우고

Xcode에서 파일을 빌드 한 다음 릴리스 디렉토리에서이 파일을 가져 왔습니다 (릴리스의 경우 -O3을 사용하도록 최소한으로 조정). 여기에서 ~ 350MB dSYM 파일이 디버그 정보를 포함하고 있다는 것을 알 수 있습니다. 즉, .xarchive의 공간 대부분을 차지하고 있으며 실제로는 lldb의 실행 가능 코드 합계가 40MB 미만입니다. 대부분이 해당 프레임 워크에 있습니다. 실행 파일 이름은 LLDB입니다.

이것은 훨씬 합리적입니다. Xcode와 내 Documents 디렉토리에서 알기없이 외부 프로그램을 삭제하거나 수정할 필요가 없으므로 여기에서 /usr/lib/lldb으로 symlinking하는 것이 좋습니다.