【问题标题】:Symbolicating addresses programmatically以编程方式符号化地址
【发布时间】:2018-01-31 23:37:09
【问题描述】:

假设我有 DSYM 和系统符号,我正在寻找一种在我自己的应用程序 (macOS) 中表示外部应用程序符号 (iOS) 的方法。

Xcode 既表示应用程序地址,也表示系统框架地址(UIKit、Foundation 等)。 atos 需要一个图像文件,并且可以从该图像中表示地址。

我希望在我自己的应用程序中符号化大量地址。地址代表不同时间点的堆栈跟踪。我也想象征系统框架地址。

我找到了atosl,它使用dwarf.hlibdwarf.h 重新实现atos,取得了不同程度的成功——但这似乎是一种非常低级的方法。

还有其他方法可以同时符号化大量地址吗?

【问题讨论】:

标签: ios macos dwarf symbolicate


【解决方案1】:

这是我在测试中使用的符号(需要 XCTest):https://github.com/avito-tech/Mixbox/blob/db3206c95b71f35ae6032ff9b0baff13026608f4/Frameworks/TestsFoundation/Reporting/FileLineForFailureProvider/StackTrace/ExtendedStackTraceEntryFromStackTraceEntryConverterImpl.swift

我使用代码突出显示 Xcode 中的测试失败,而不需要测试人员在任何地方都通过 file: StaticString = #file, line: UInt = #line。该样板代码的可读性较差,而且这种样板文件没有太多理由,因为理想情况下 Xcode 应该能够突出显示测试失败的堆栈跟踪...

请注意,有一个问题。如果您在执行代码的机器上没有源代码,则它没有符号化。或许能很快修好,我都没试过。

代码中还有关于其他选项的cmets:atos、lldb、CoreSymbolication。我认为CoreSymbolication 是您想要使用的。我给你的解决方案很简单,更依赖XCTest,配置较少,还有一些其他的缺陷。

【讨论】:

  • 它不再起作用了,我想自从我更新到 Catalina 之后。它在安全性上有一些变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多