2

当我编译我的 swift 框架时MyFramework,我让 Xcode 生成MyFramework.framework(编译的框架)和MyFramework.framework.dSYM(dSYM 文件)。

通过运行 dwarfdump myframework.framework.dSYM/Contents/Resources/DWARF/MyFramework,我注意到源文件的所有路径都是绝对路径。

这使得无法与我的同事共享这两个工件(连同源代码)并允许他们使用已编译的框架并能够正确调试他们的代码。更准确地说,他们无法使用调试器进入框架。

出于这个原因,他们需要重新编译非常不方便的框架。

有没有办法修改 DWARF 以编辑这些路径,或者更好地说服 Xcode 在 DWARF 文件中使用相对路径?

4

1 回答 1

2

虽然我不知道如何更改存储在 dSYM 中的路径或使它们相对,但我可以提供一种解决问题的方法,并能够在任意机器上使用这些符号进行调试,源代码位于不同的基本路径。

一旦你找出原始路径是什么(例如 /Users/rob/src/Project),并且你在 /Users/luka/Sources/Project 中有该库的代码,那么你可以发出这个 lldb 命令,它将用您的路径替换该调试器会话的原始路径:

settings set target.source-map /Users/rob/src/Project /Users/luka/Sources/Project

不幸的是,您需要为每个调试会话运行此命令。为此,您可以在main中创建一个断点,该断点运行该命令并继续执行而不会停止。

要找到原始源路径,您可以使用dwarfdump您提到的,或者您可以使用或通过命令的其他参数从 lldb 查找您知道该二进制文件中im loo -v -n MySymbol的符号(取决于您尝试使用的符号类型) )。

于 2017-11-29T11:56:38.700 回答