Nice programing

Instruments로 iPhone 응용 프로그램을 프로파일 링 할 때 기호 이름 누락

nicepro 2020. 12. 9. 21:44
반응형

Instruments로 iPhone 응용 프로그램을 프로파일 링 할 때 기호 이름 누락


명령 줄을 통해 IPhone 응용 프로그램을 컴파일하고 있습니다 (XCode 옵션이 포함되지 않음). Instruments로 프로파일 링 할 때 표시 할 기호 이름을 가져올 수 없습니다. -gdawrf-2 및 -g와 같은 여러 플래그를 성공하지 못했습니다. 나는 또한 dsymutils를 사용하여 .dSYM 파일을 생성하려고 시도했지만 어떻게 사용 해야하는지 알지 못하여 실패했습니다.

어떤 도움이라도 대단히 감사하겠습니다!


빌드하는 동안 dSYM 파일을 포함하지 않도록 프로젝트 설정을 변경했습니다.

여기에 이미지 설명 입력

dSYM 파일을 포함하도록 변경하면 프로파일 러가 기호의 기호를 해제하고 내 문제를 해결하는 데 도움이되었습니다.

여기에 이미지 설명 입력


나는 여전히 이것에 문제가 있었다.

내 문제는 dSYM 파일이 생성되는 것을 볼 수 있었지만 Instruments가 그것을 선택하지 못했습니다.

이 문제를 해결하려면 다음을 수행하십시오.

  1. dSYM 파일을 찾습니다 (~ / Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_TYPE]-[DEVICE-TYPE] /에 있어야 함).
  2. 악기가 중지 된 상태에서 파일-> 문서 다시 기호화를 클릭하십시오.
  3. 앱 이름이있는 항목까지 아래로 스크롤합니다.
  4. "찾기"를 클릭하고 1 단계에서 폴더를 선택합니다.
  5. 시작 버튼을 클릭하여 프로파일 링을 시작합니다.

Instruments가 디버그 정보를 얻는 방법 :

Instruments는 디버그 기호 생성 옵션 상자의 확인 표시와 결합 된 dSYM 파일을 사용하여 디버그 정보 형식을 DWARF로 설정할 때 일반적으로 XCode에 의해 자동으로 생성되는 .dSYM 파일에서 디버그 정보를 얻습니다. 이러한 옵션을 설정하면 XCode 빌드 프로세스에 추가 단계가 추가되고 애플리케이션이 컴파일 된 후 dSYM 파일이 생성됩니다. 모든 dSYM은 파생 된 바이너리의 Mach-O 섹션에있는 UUID에 해당하는 UUID로 빌드됩니다. Spotlight 가져 오기 도구는 Mac에서 Spotlight에 액세스 할 수있는 위치에있는 모든 dSym 파일의 UUID를 인덱싱합니다. 따라서 SPOTLIGHT는 모든 흑 마법을 수행하고 실행중인 .app과 해당 .dSYM 파일 간의 링크를 만드는 책임이 있습니다.

XCode없이 디버그 정보 및 dSYM 파일을 생성하는 방법 :

–gdwarf-2 및 -g 플래그로 컴파일되었는지 확인하십시오. (다른 플래그 조합이 작동 할 수 있음)

-g 운영 체제의 기본 형식 (stabs, COFF, XCOFF 또는 DWARF 2)으로 디버깅 정보를 생성합니다. GDB는이 디버깅 정보로 작업 할 수 있습니다. stabs 형식을 사용하는 대부분의 시스템에서 -g는 GDB 만 사용할 수있는 추가 디버깅 정보를 사용할 수 있도록합니다. 이 추가 정보로 인해 GDB에서 디버깅이 더 잘 작동하지만 다른 디버거가 충돌하거나 프로그램 읽기를 거부 할 수 있습니다. 추가 정보 생성 여부를 제어하려면 -gstabs +, -gstabs, -gxcoff +, -gxcoff 또는 -gvms를 사용하십시오 (아래 참조). GCC를 사용하면 -g를 -O와 함께 사용할 수 있습니다. 최적화 된 코드가 사용하는 단축키는 때때로 놀라운 결과를 생성 할 수 있습니다. 선언 한 일부 변수는 전혀 존재하지 않을 수 있습니다. 제어 흐름은 예상치 못한 곳으로 잠시 이동할 수 있습니다. 일부 명령문은 상수 결과를 계산하거나 해당 값이 이미 가까워서 실행되지 않을 수 있습니다. 일부 문은 루프 밖으로 이동했기 때문에 다른 위치에서 실행될 수 있습니다.
그럼에도 불구하고 최적화 된 출력을 디버그 할 수 있음이 입증되었습니다. 따라서 버그가있을 수있는 프로그램에 최적화 프로그램을 사용하는 것이 합리적입니다.

-gdwarf-2 DWARF 버전 2 형식 (지원되는 경우)으로 디버깅 정보를 생성합니다. 이것은 IRIX 6에서 DBX가 사용하는 형식입니다.이 옵션을 사용하면 GCC는 유용 할 때 DWARF 버전 3의 기능을 사용합니다. 버전 3은 버전 2와 상향 호환되지만 이전 디버거에서는 여전히 문제를 일으킬 수 있습니다.

dsymutil을 사용하여 dSYM 파일을 생성합니다. 도구가 명령 줄에서 인식되지 않는 경우 스포트라이트를 사용하여 찾습니다. 중요 : 네트워크 드라이브에서 작업하는 경우 dSYM을 생성하기 전에 .app 파일을 Mac HD에 배치하십시오.

dsymutil MyApp.app/MyApp -o MyApp.app.dSYM

.dSYM 파일을 Mac의 로컬 드라이브에 놓고 평소처럼 Instruments를 실행합니다.

Resettig 스포트라이트의 인덱싱 :

기호가 표시되지 않으면 Spotligh가 버그가 있기 때문일 수 있습니다. dSYM 파일 (또는 드라이브)이 포함 된 폴더를 스포트라이트 환경 설정의 "스포트라이트가이 위치를 검색하지 못하도록 방지"에 추가 한 다음 즉시 제거하여 스포트라이트 색인을 재설정 할 수 있습니다.


Xcode 4.5에서는 디버그 또는 릴리스 빌드에서 프로파일 링을 선택할 수 있습니다. 릴리스는 장치에 복사 할 때 기호를 제거하는 기본 설정입니다. 릴리스 구성을 중단하지 않고 프로파일 링을 위해 디버그 구성으로 전환하는 것은 매우 쉽습니다. 이를 위해 XCode 메뉴에서 Product-> Edit Scheme을 선택합니다. 나타나는 구성표 목록에서 "프로필"을 선택한 다음 올바른 빌드 구성을 선택하십시오.

Or you could make a separate release/profile configuration and use that in your Profile section of your scheme. How to add a separate build configuration is described in the XCode User Guide.


With Xcode 6 Instruments you can provide dSYM file as follow:

  • File -> Symbols... menu (when profiling is stopped)
  • select your app and press Locate button
  • select path which contains dSYM (usually ~/Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUILD_CONFIGURATION]-[TARGET_PLATFORM]/). Tip: You can copy this path from terminal and use OS X shortcut ⌘+SHIFT+G in dialog.

Also Instruments will ask you if it should use selected path to try load dSYM for this app in the future. Answer Yes :)


Spent three days trying to figure this out for Xcode 7.1/7.3...

Changing the deployment target to the latest version (9.3 at the time) fixed this issue for me. My company targets 7.0 so I will probably have to create a custom Scheme for profiling the code in Instruments to avoid having to change the target (or forgetting to change the target) when we do a production release.

Seems like it's probably a bug if dSYMs fail to work based on the deployment target?


The problem is that spotlight cannot find the .dSYM files. This is because Apple changed the location of the DerivedData folder. The DerivedData now goes in ~/Library

Spotlight will not index ~/Library and as far as I have been able to establish, cannot be made to index it either (e.g. mdimport is ignored).

A work around to get symbols in your profiler, is to simply copy the data outside ~/Library e.g. your home directory will do fine.

I used this command line:

$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/

When you kill your profiler, and start a new profile run, you will see that the symbols are available again.


Check the build log and make sure that your -g switch is getting through to the compiler - it's easy to get this wrong when changing settings at the project and/or target levels for different build configurations etc.


Another work around in the version of Instruments that comes with Xcode 4 is to use the Re-Symbolicate Document menu item under the File menu for Instruments. This menu item to allows you to use the symbols located in the .dSYM file in ~/Library/... directory.


In my experience, this is usually because "Profile" has been called before the most recently modified version of the app has been installed on the target device.

Try running the app on the device/target, then calling "Profile" again after it has been reinstalled.


I got this problem because the XCode project was on a network share where Spotlight wouldn't find the dSYM files. Make sure it's on the local drive.

참고 URL : https://stackoverflow.com/questions/2776466/missing-symbol-names-when-profiling-iphone-application-with-instruments

반응형