gpt4 book ai didi

c++ - 没有 dsym 的 iOS 崩溃报告符号化 - 在二进制文件中看到的地址之外的符号地址

转载 作者:可可西里 更新时间:2023-11-01 06:01:40 25 4
gpt4 key购买 nike

我正在尝试符号化我没有 dsym 文件的 iOS 崩溃报告。我知道我将无法获得一个漂亮的文件名:行号符号,但找出代码的汇编部分中发生崩溃的位置就足够了。

首先,这里是崩溃线程的堆栈跟踪:

Thread 3 name:  Dispatch queue: com.unity3d.WebOperationQueue :: NSOperation 0x1483250e0 (QOS: USER_INTERACTIVE)
Thread 3 Crashed:
0 myapp 0x0000000100ec4738 0x100080000 + 14960440
1 myapp 0x000000010120e0fc 0x100080000 + 18407676
2 myapp 0x00000001011d7e00 0x100080000 + 18185728
3 myapp 0x0000000100085cfc 0x100080000 + 23804
4 CFNetwork 0x0000000185027780 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 80
...

我有一个解密的二进制文件,并从崩溃报告和二进制文件匹配中验证了 uuid。要手动符号化堆栈地址,我这样做

atos -arch arm64 -o myapp -l 0x100080000 0x0000000100ec4738

我从上面的命令得到的输出是

0x0000000100e44738 (in myapp) + 544

这在一定程度上是预料之中的,因为我没有 dsym 文件。

请注意0x0000000100e44738如果我们计算也可以得到

符号地址为=(滑动+栈-加载地址)

幻灯片是 0x0000000100000000(从 otool -arch arm64 -l myapp | grep -B 3 -A 8 -m 2 "__TEXT" 找到 vmaddr)

所以 0x0000000100000000 + 0x0000000100ec4738 - 0x100080000 = 0x100e44738 与上述 atos 返回的地址相同。

现在的问题是,我在使用下面的 otool 命令获得的二进制文件的 TEXT 部分的地址中没有找到 0x100e44738 符号地址

otool -tvV myapp

上述命令的开头如下所示。

myapp:
(__TEXT,__text) section
__ZNK5physx14NpSceneQueries10multiQueryINS_12PxRaycastHitEEEbRKNS_15MultiQueryInputERNS_13PxHitCallbackIT_EENS_7PxFlagsINS_9PxHitFlag4EnumEtEEPKNS_12PxQueryCacheERKNS_17PxQueryFilterDataEPNS_21PxQueryFilterCallbackEPNS_20BatchQueryFilterDataE:
0000000101262f40 stp x28, x27, [sp, #-96]!
0000000101262f44 stp x26, x25, [sp, #16]
0000000101262f48 stp x24, x23, [sp, #32]
0000000101262f4c stp x22, x21, [sp, #48]
0000000101262f50 stp x20, x19, [sp, #64]
0000000101262f54 stp x29, x30, [sp, #80]
...

我们可以清楚地看到 otool -tvV (0x101262f40) 的起始地址大于 符号地址 (0x100e44738)。所以我无法找到我错过的东西或如何从这里开始。

此堆栈跟踪是针对 SIGSEGV 异常的,我不确定这是否会改变任何内容。我在另一个带有 SIGABRT 异常的示例应用程序中尝试了完全相同的手动符号化步骤,我确实看到它能够指出程序集中的确切行崩溃。

非常感谢任何帮助或指示。

最佳答案

我看起来像是 NSURLConnection 的问题。通常这意味着有一个未在 dealloc 上正确取消设置的委托(delegate)(NSURLConnection 已分配 - 不弱,因此您必须手动将其设置为 nil)。在您的代码中查找使用 NSURLConnection 或其他类似网络的代码的地方。要特别注意将自己设置为网络请求委托(delegate)的 View 或 viewController,因为 View 通常会在用户离开页面时留下内存。

关于c++ - 没有 dsym 的 iOS 崩溃报告符号化 - 在二进制文件中看到的地址之外的符号地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788503/

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