iOS Instruments-¿Cómo cargar un archivo dSYM para bibliotecas Swift como libswift.foundation.dylib?
(4)
Estoy intentando libswiftCore.dylib
un perfil de una aplicación Swift en Instruments y tengo dificultades porque los símbolos de depuración para libswiftCore.dylib
y las bibliotecas ibswiftFoundation.dylib
no se muestran. El texto del mouseover sugiere utilizar File -> Symbols
para seleccionar manualmente los archivos dSYM, pero no tengo idea de dónde están almacenados, ni siquiera si existen. Los símbolos del código que he escrito aparecen bien.
Configuré un proyecto de prueba y lo perfilé en instrumentos para demostrar:
¿Cómo puedo identificar las funciones que se muestran en libswiftCore.dylib
?
Como supongo que quieres los significados de los comandos
El comando de compilación se ve algo así como:
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 -whole-module-optimization -module-name MyModule -emit-object -o -gnone desactiva la información de depuración que probablemente no sea muy útil hasta que tenga algún tipo de soporte de depurador
-O es para optimización, las otras opciones son -Onone que lo desactiva pero produce una mayor cantidad de código y -Ounchecked que es -O pero sin controles adicionales después de ciertas operaciones. -O produce un buen código, pero tiende a incluir todo en una gran función que puede dificultar el entrenamiento de lo que salió mal cuando un controlador de excepciones simplemente da el indicador de instrucción como la fuente de un error.
-Xfrontend -disable-red-zone asegura que el código generado desde swiftc no genere el código de zona roja.
-Xcc -mno-red-zone le dice al compilador Clang que no use la zona roja en ningún archivo que compile. clang se usa si hay algún código en el archivo de encabezado que use, lo que probablemente será el caso que se mostrará.
-Xcc -mno-mmx -Xcc -mno-sse -Xcc -mno-sse2 usa opciones de argot para decirle a swiftc que no use MMX / SSE / SSE2
-parse-as-library significa que el código no es un script.
-import-objc-header permite importar un archivo de encabezado .h que permite el acceso a la función C y las definiciones de tipo.
-module-name es obligatorio, aunque solo se utiliza para calificar completamente los nombres de métodos y funciones. Sin embargo, los archivos de módulos reales no se crean con esta opción.
Bibliotecas
Ahora que se ha producido un archivo .o ELF, debe estar vinculado a un ejecutable final. Swift requiere que su stdlib esté vinculado, ya que proporciona algunas funciones básicas que Swift necesita en el tiempo de ejecución.
El nombre de la biblioteca es libswiftCore.a y debe estar en lib / swift_static / linux en el directorio de instalación.
libswiftCore.a se basa en libc, libcpp y algunas otras bibliotecas del sistema, sin embargo, no estarán disponibles, por lo que es necesario emular las funciones que faltan. La lista completa de símbolos que deben implementarse se puede encontrar aquí: - https://github.com/spevans/swift-project1/blob/master/doc/symbols.txt
Esta respuesta se copia de https://github.com/Flash3001/iOSCharts.Xamarin/issues/17
por: flash3001
Pero espero que esto te ayude:
El archivo se encuentra en: /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS
Antes de:
<Target Name="_CalculateCodesignAppBundleInputs" Condition="''$(_RequireCodeSigning)'' == ''true''">
<ItemGroup>
<_CodesignAppBundleInput Include="$(_NativeExecutable)" />
<_CodesignAppBundleInput Include="$(_AppBundlePath)Info.plist" />
<_CodesignAppBundleInput Include="$(_AppBundlePath)embedded.mobileprovision" />
<_CodesignAppBundleInput Include="$(DeviceSpecificIntermediateOutputPath)Entitlements.xcent" />
<_CodesignAppBundleInput Include="@(_BundleResourceWithLogicalName)" />
<_CodesignAppBundleInput Include="@(_NativeLibrary)" />
<_CodesignAppBundleInput Include="@(_Frameworks)" />
<_CodesignAppBundleInput Include="@(_ResolvedAppExtensionReferences -> ''$(_AppBundlePath)PlugIns/%(FileName)%(Extension)/_CodeSignature/CodeResources'')" Condition="''$(IsAppExtension)'' == ''false''" />
<!-- Include WatchOS1 App references -->
<_CodesignAppBundleInput Include="@(_ResolvedWatchAppReferences -> ''$(_AppBundlePath)%(FileName)%(Extension)/_CodeSignature/CodeResources'')" Condition="''$(IsAppExtension)'' == ''true''" />
<!-- Include WatchOS2 App references -->
<_CodesignAppBundleInput Include="@(_ResolvedWatchAppReferences -> ''$(_AppBundlePath)Watch/%(FileName)%(Extension)/_CodeSignature/CodeResources'')" Condition="''$(OutputType)'' == ''Exe''" />
</ItemGroup>
</Target>
<Target Name="_CodesignAppBundle" Condition="''$(_RequireCodeSigning)'' == ''true''" DependsOnTargets="$(_CodesignAppBundleDependsOn)"
Inputs="@(_CodesignAppBundleInput)"
Outputs="$(DeviceSpecificIntermediateOutputPath)codesign/$(_AppBundleName)$(AppBundleExtension)">
Después:
<Target Name="_CalculateCodesignAppBundleInputs" Condition="''$(_RequireCodeSigning)'' == ''true''">
<ItemGroup>
<_CodesignAppBundleInputs Include="$(_AppBundlePath)**/*.*" Exclude="$(_AppBundlePath)_CodeSignature/CodeResources" />
</ItemGroup>
</Target>
<Target Name="_CodesignAppBundle" Condition="''$(_RequireCodeSigning)'' == ''true''" DependsOnTargets="$(_CodesignAppBundleDependsOn)"
Inputs="@(_CodesignAppBundleInputs)" Outputs="$(_AppBundlePath)_CodeSignature/CodeResources">
Advertencia: no copie el archivo completo, ya que romperá otras cosas. Advertencia 2: normalmente no debe modificar este archivo, ya que es de Xamarin y puede impedir que el proceso de construcción funcione si hace algo incorrecto. Advertencia 3: Será reemplazado cuando actualice Xamarin.
Puede encontrar los archivos dSym en sus archivos en xcode-> Ventana -> Organizador -> Archivos elija la versión adecuada de su compilación -> Mostrar en buscador -> Mostrar contenido del paquete => encontrará una carpeta "dSYMs" allí.
Podrías cargarlos en la aplicación de Instrumentos.
Si ha instalado Xcode en la ubicación predeterminada, los archivos swift dylib se pueden encontrar en:
/Aplicaciones/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/
(Tenga en cuenta que estos no son archivos dSYM) Bajo este directorio encontrará un subdirectorio para los diferentes objetivos de compilación, por ejemplo, macosx para OS X, iphoneos para dispositivos iOS e iphonesimulator para el simulador, etc. (vaya a la carpeta lib para ver lo que hay)
La carga del archivo correcto de una de estas carpetas debería funcionar.
Si todo lo demás falla, es posible que deba crear su propia copia de las bibliotecas swift con símbolos de depuración del código fuente que se puede encontrar en https://github.com/apple/swift