通过程序符号化地址

5
我正在寻找一种方法,在我的应用程序(macOS)内符号化外部应用程序符号(iOS),假设我有DSYM和系统符号。
Xcode会将应用程序地址以及系统框架地址(UIKit、Foundation等)进行符号化。 atos需要一个映像文件,并且可以从该映像中符号化地址。
我想要在自己的应用程序中符号化大量地址。这些地址表示不同时间点的堆栈跟踪。我也想符号化系统框架地址。
我发现了atosl,它使用dwarf.hlibdwarf.h重新实现了atos,但成功程度各不相同-然而,这似乎是一种非常底层的方法。
是否还有其他一次符号化大量地址的方法?

以下是我在测试中使用的符号化(需要 XCTest):https://github.com/avito-tech/Mixbox/blob/db3206c95b71f35ae6032ff9b0baff13026608f4/Frameworks/TestsFoundation/Reporting/FileLineForFailureProvider/StackTrace/ExtendedStackTraceEntryFromStackTraceEntryConverterImpl.swift - artyom.razinov
1个回答

0

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

我使用这段代码在Xcode中突出显示测试失败,而不需要测试人员在每个地方都传递file: StaticString = #file, line: UInt = #line。这样的样板代码使得代码难以阅读,而且没有太多理由使用这样的样板代码,因为理想情况下,Xcode应该能够突出显示测试失败的堆栈跟踪...

请注意,存在一个问题。如果执行代码的机器上没有源代码,则无法进行符号化。也许可以快速修复,但我甚至没有尝试过。

此外,代码中还有关于其他选项的注释:atos、lldb、CoreSymbolication。我认为你想使用CoreSymbolication。我给你提供的解决方案简单易行,更依赖于XCTest,可配置性较低,还有一些其他缺陷。


它不再工作了,我认为是因为我更新到Catalina。它在安全方面有一些变化。 - artyom.razinov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接