Подтвердить что ты не робот

IOS Instruments - Как загрузить файл dSYM для библиотек Swift, таких как libswift.foundation.dylib?

Я пытаюсь профилировать приложение Swift в инструментах и ​​испытываю трудности, потому что символы отладки для библиотек libswiftCore.dylib и libswiftFoundation.dylib не отображаются. Текст с подсказкой подсказывает использование File → Symbols для ручного выбора файлов dSYM, но я не знаю, где они хранятся, или даже если они существуют. Символы из кода, который я написал, выглядят отлично.

Я создал тестовый проект и профилировал его в инструментах, чтобы продемонстрировать:

Symbols from libSwiftCore.dylib are not available

Как я могу определить функции, показанные в libswiftCore.dylib?

4b9b3361

Ответ 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