gpt4 book ai didi

objective-c - 如何从 Xcode 崩溃日志中准确找到发生崩溃的位置?

转载 作者:行者123 更新时间:2023-12-02 07:28:07 24 4
gpt4 key购买 nike

所以我有这个崩溃日志。从我可以从 DateTimeHelper 收集到的函数中,我得到了一个它不期望的对象,并在其上执行该对象没有的函数。
我无法重现这个问题,所以我不知道它在函数内部的确切位置。我可以从崩溃日志中找出一些方法吗?与函数条目 +176 的字节偏移量有帮助吗?正在执行的机器指令的地址是否有帮助?如果完全相关,我不知道如何使用这两个数字。

0   CoreFoundation                  0x24c0f916 __exceptionPreprocess + 122 (NSException.m:162)
1 libobjc.A.dylib 0x243aae12 objc_exception_throw + 34 (objc-exception.mm:531)
2 CoreFoundation 0x24c152b0 -[NSObject(NSObject) doesNotRecognizeSelector:] + 184 (NSObject.m:333)
3 CoreFoundation 0x24c12edc ___forwarding___ + 696 (NSForwarding.m:3149)
4 CoreFoundation 0x24b3e234 _CF_forwarding_prep_0 + 20 (NSForwarding.s:641)
5 MyApp 0xc83c4 +[DateTimeHelper dateFromServerFormat:withLocale:andTimeZone:] + 176
为什么 MyApp 框架没有文件和行号?这是某种隐私问题吗?崩溃日志来自管理器报告。我记得以前可以单击管理器中的功能并将我发送到确切的位置。现在不知道是不是新的 Xcode 12.0 (12A7209) 破坏了它。它只在 Xcode 中打开堆栈,仅此而已。

最佳答案

Apple 的自动符号不提供崩溃发生的文件和代码行。
根据评论建议,我对代码进行了符号化。来自 apple documentation使用 atos:

atos -arch <BinaryArchitecture> -o <PathToDSYMFile>/Contents/Resources/DWARF/<BinaryName>  -l <LoadAddress> <AddressesToSymbolicate>
Find your DSYM崩溃版本的文件。如果您的build设置为添加 DSYM,通常可以在存档版本中找到,或者如果已上传,您可以从 Apple 下载它。使用此图像替换其余模板:
enter image description here
更换占位符后,它应该看起来像这样:
atos -arch arm64 -o TouchCanvas.app.dSYM/Contents/Resources/DWARF/TouchCanvas -l 0x1022c0000 0x00000001022df754
ViewController.touchesEstimatedPropertiesUpdated(_:) (in TouchCanvas) + 304
还有 this是一个非常有用的帖子。
请记住,在某些情况下,文件名或行号信息与原始源代码不对应。代码可能不是在您的源文件中由编译器生成的,或者编译器可能已经优化了您的源,在这种情况下,优化的代码行可能与源不对应。

关于objective-c - 如何从 Xcode 崩溃日志中准确找到发生崩溃的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64044936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com