IOS Instruments - Как загрузить файл dSYM для библиотек Swift, таких как libswift.foundation.dylib?
Я пытаюсь профилировать приложение Swift в инструментах и испытываю трудности, потому что символы отладки для библиотек libswiftCore.dylib и libswiftFoundation.dylib не отображаются. Текст с подсказкой подсказывает использование File → Symbols для ручного выбора файлов dSYM, но я не знаю, где они хранятся, или даже если они существуют. Символы из кода, который я написал, выглядят отлично.
Я создал тестовый проект и профилировал его в инструментах, чтобы продемонстрировать:
![Symbols from libSwiftCore.dylib are not available]()
Как я могу определить функции, показанные в libswiftCore.dylib?
Ответы
Ответ 1
Вы можете найти файлы dSym в ваших архивах
под xcode- > Window → Организатор → Архив
выберите правильную версию своей сборки → Показать в finder → Показать содержимое пакета = > вы найдете там папку "dSYMs".
Вы можете загрузить их в приложение "Инструменты".
Ответ 2
Если вы установили Xcode в местоположение по умолчанию, файлы быстрого dylib можно найти в:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/
В этом каталоге вы найдете подкаталог для разных целей сборки, например macosx для OS X, iphoneos для устройств iOS и iphonesimulator для симулятора и т.д. (перейдите в папку lib, чтобы посмотреть, что там)
Загрузка нужного файла из одной из этих папок, надеюсь, будет работать.
Если все остальное не удается, вам может понадобиться создать собственную копию быстрых библиотек с символами отладки из исходного кода, который можно найти в https://github.com/apple/swift
Ответ 3
Как я предполагаю, вы хотите значения команд
Команда компиляции выглядит примерно так:
swift -frontend -gnone -O -Xfrontend -disable-red-zone -Xcc -mno-red-zone -Xcc -mno-mmx -Xcc -mno-sse -Xcc -mno-sse2 -parse-as-library -import-objc-header -все-модуль-оптимизация -module-name MyModule -emit-object -o
-gnone отключает отладочную информацию, которая, вероятно, не очень полезна, пока у вас не будет какой-либо поддержки отладчика.
-O предназначен для оптимизации, другие варианты - только одно, которое отключает его, но производит большее количество кода и -Ounchecked, который равен -O, но без дополнительных проверок после определенных операций. -O создает хороший код, но имеет тенденцию встраивать все в одну большую функцию, которая может затруднить тренировку, что пошло не так, когда обработчик исключений просто указывает указатель инструкции как источник ошибки.
-Xfrontend -disable-red-zone гарантирует, что код, сгенерированный из swiftc, не генерирует код красной зоны.
-Xcc -mno-red-zone сообщает компилятору clang не использовать красную зону для любых файлов, которые она компилирует. clang используется, если в файле заголовка используется какой-либо код, который, вероятно, будет иметь место, как будет показано.
-Xcc -mno-mmx -Xcc -mno-sse -Xcc -mno-sse2 использует параметры clang, чтобы сообщить swiftc не использовать MMX/SSE/SSE2
-parse-as-library означает, что код не является script.
-import-objc-header позволяет импортировать заголовочный файл .h, который позволяет получить доступ к определениям C и типам.
-module-name требуется, хотя используется только при полной квалификации имени метода и функции. Однако фактические файлы модулей не создаются с этой опцией.
Библиотека
Теперь, когда был создан файл .o ELF, он должен быть связан с окончательным исполняемым файлом. Swift требует, чтобы его stdlib был связан, поскольку это обеспечивает некоторые основные функции, которые необходимы Swift во время выполнения.
Имя библиотеки - libswiftCore.a и должно быть в lib/swift_static/linux в каталоге установки.
libswiftCore.a полагается на libc, libcpp и несколько других системных библиотек, однако они не будут доступны, поэтому недостающие функции нужно эмулировать. Полный список символов, которые необходимо реализовать, можно найти здесь: - https://github.com/spevans/swift-project1/blob/master/doc/symbols.txt