iOS 调试动态库的工具
iOS tools for debugging dynamic libraries
我想了解动态链接在 iOS 8 上的工作原理,并希望在应用程序启动时打印已解析库的位置。有什么工具可以做到这一点吗?在找不到 dylib 时的崩溃报告中有一些关于搜索路径的信息,但我无法在非崩溃执行中找到此信息。
具体来说,我正在尝试了解一个有效但我认为不会的场景:
- Swift 框架 (Foo):
Dynamic Library Install Name
是 @rpath/Foo.framework/Foo
- Swift 应用程序(栏):
Runtime Search Paths
是@executable_path/Frameworks
该应用程序 没有 有任何嵌入式二进制文件 (General -> Embedded Binaries
),并且 没有 将框架作为一个包嵌入资源(Build Phases -> Copy Bundle Resources
)。
在生成的 Bar.app
文件夹中有一个 Frameworks
目录,但它不包含 Foo
,并且 Foo
不包含在 [=15] 中的其他任何地方=].我看不出 Foo
是如何解决的,因为框架是嵌入式的,应该不可用?
我找到了我要找的东西,正如 Apple 在一个名为 Technical Note TN2239 iOS Debugging Magic. In this document there is a section describing various environment variables 的文档中所记录的那样,可以设置它会强制动态链接器写出有用的调试信息。
在 Xcode (Edit Scheme -> Run -> Arguments -> Environment Variables
) 中设置这些变量后,我得到了有关链接器解析的方式和内容的详细信息。
我想了解动态链接在 iOS 8 上的工作原理,并希望在应用程序启动时打印已解析库的位置。有什么工具可以做到这一点吗?在找不到 dylib 时的崩溃报告中有一些关于搜索路径的信息,但我无法在非崩溃执行中找到此信息。
具体来说,我正在尝试了解一个有效但我认为不会的场景:
- Swift 框架 (Foo):
Dynamic Library Install Name
是 @rpath/Foo.framework/Foo - Swift 应用程序(栏):
Runtime Search Paths
是@executable_path/Frameworks
该应用程序 没有 有任何嵌入式二进制文件 (General -> Embedded Binaries
),并且 没有 将框架作为一个包嵌入资源(Build Phases -> Copy Bundle Resources
)。
在生成的 Bar.app
文件夹中有一个 Frameworks
目录,但它不包含 Foo
,并且 Foo
不包含在 [=15] 中的其他任何地方=].我看不出 Foo
是如何解决的,因为框架是嵌入式的,应该不可用?
我找到了我要找的东西,正如 Apple 在一个名为 Technical Note TN2239 iOS Debugging Magic. In this document there is a section describing various environment variables 的文档中所记录的那样,可以设置它会强制动态链接器写出有用的调试信息。
在 Xcode (Edit Scheme -> Run -> Arguments -> Environment Variables
) 中设置这些变量后,我得到了有关链接器解析的方式和内容的详细信息。