안녕하세요. PDB 파일의 크기를 줄이면서 디버그에 필요한 정보를 가능한 포함시키는 방법에 대해 문의드립니다.
별다른 설정 없이 에디터를 빌드했을 때 PDB 파일이 총 70 GB 정도가 생성되었는데요,
Sentry, 심볼 서버 업로드에 시간이 너무 오래걸려 PDB 크기를 줄여보려 합니다.
에디터 빌드 시 “-StripPrivateSymbols” 옵션을 지정했을 때,
Engine\Binaries\Win64\IOS\UnrealEditor-IOSTargetPlatformSettings.pdb 파일 기준으로 58.5MB -> 204KB 로 크기는 많이 줄어드는 것을 확인했지만
해당 PDB 로는 크래시가 발생한 함수까지만 확인되고 라인 번호가 나오지 않아 디버깅에 문제가 있었습니다.
에픽 런처에서 받은 엔진에 포함된 PDB 는 크기도 작으면서 라인 번호까지 나왔던 것으로 기억하는데요,
(에픽 런처 UnrealEditor-IOSTargetPlatformSettings.pdb: 188KB)
(1) PDB 파일의 크기를 줄이면서 라인 번호와 같은 디버그 정보를 최대한 포함할 수 있는 빌드 옵션이 있을지
(2) 에픽 런처에 포함되는 PDB 를 생성할 때 사용하는 빌드 옵션은 어떤 것인지
안내해주실 수 있다면 감사하겠습니다.
[Attachment Removed]
안녕하세요.
(1) PDB 파일의 크기를 줄이면서 라인 번호와 같은 디버그 정보를 최대한 포함할 수 있는 빌드 옵션이 있을지
빌드 환경설정 시 DebugInfoLineTablesOnly 설정을 아래 문서 내용을 참고하여 적용해보시는 것을 권유드립니다. 해당 빌드 환경설정은 MSVC에서 지원하지 않으므로 Clang 컴파일러를 사용할 필요가 있습니다.
https://dev.epicgames.com/documentation/unreal-engine/build-configuration-for-unreal-engine
$ DebugInfoLineTablesOnly : 해당 기능을 지원하는 컴파일러의 디버그 정보에 디버그 라인 번호 테이블만 출력해야 하는 경우 true로 설정합니다. TargetRules.DebugInfo를 오버라이드합니다. 자세한 내용은 https://clang.llvm.org/docs/UsersManual.html#cmdoption-gline-tables-only를 참조하세요.
(2) 에픽 런처에 포함되는 PDB 를 생성할 때 사용하는 빌드 옵션은 어떤 것인지
에픽 런처 엔진은 모듈 종류에 따라 PDB를 두 가지로 나누어 빌드합니다. 대부분의 UnrealEditor 모듈은 크기를 줄이기 위한 별도 옵션 없이 스트립되지 않은 PDB로 생성되어 라인 번호가 그대로 나옵니다. 반면 특정 플랫폼 모듈과 UnrealGame 타겟, 프로그램 및 툴의 PDB는 스트립되어 라인 번호가 나오지 않습니다.
이후 배포 구성 시 대부분의 PDB는 디버깅을 위한 에디터 심볼 옵션에 포함되며 이 옵션을 활성화하여 런처 엔진 다운로드 시 에디터 모듈 PDB 전체를 다운로드합니다.
이 때 문의주신 UnrealEditor-IOSTargetPlatformSettings.pdb를 포함한 플랫폼 모듈 PDB도 함께 포함하여 다운로드되지만 빌드 단계에서 이미 스트립되어 있어 라인 번호가 나오지 않습니다. 반면 같은 옵션으로 받은 UnrealEditor-Engine.pdb는 스트립되지 않아 라인 번호가 정상적으로 나옵니다.
만약 위 방법대로 진행해도 라인 번호가 보이지 않는 등의 문제가 여전히 발생하는 경우 엔진의 PDB는 Custom Repositories 심볼 서버에 업로드하여 한번만 업로드하고 프로젝트의 PDB는 https://docs.sentry.io/platforms/unreal/ 문서대로 자동 또는 수동 업로드하여 엔진과 프로젝트의 PDB를 분리하여 시간을 줄일 수 있도록 업로드하는 방식을 권유드립니다.
에디터 타겟일 경우 엔진과 프로젝트의 PDB 파일이 이미 분리되어 있으며 패키징 등 게임 타겟의 경우 LinkType = TargetLinkType.Modular를 추가하여 패키징하면 엔진과 프로젝트가 분리된 PDB 파일이 생성됩니다.
감사합니다.
[Attachment Removed]
안녕하세요. 답변 감사합니다.
말씀해주신대로 에픽 런처에서도 크기가 큰 pdb 와 작은 pdb 가 있는 것 확인하였습니다.
우선은 (1) 에서 말씀해주신 Clang 사용 전에, (2) 에서 말씀해주신 대로 모듈별로 스트립 된 pdb 사용 여부를 다르게 가져가는 방법을 사용해보도록 하겠습니다.
자세한 답변 감사드립니다!
[Attachment Removed]