【问题标题】:NSThread callStackSymbols logs <redacted> symbolsNSThread callStackSymbols 记录 <redacted> 符号
【发布时间】:2013-11-24 12:46:39
【问题描述】:

我正在尝试调试一些并发代码,当我记录 [NSThread callStackSymbols];控制台将我感兴趣的大多数符号显示为

有没有办法在运行时解决这个问题?我已经删除了设备符号文件夹,但 Xcode 重新符号化似乎并没有解决问题。

这里还有一些其他问题,但他们似乎都在尝试解决崩溃文件的问题。

如何在调试控制台中查看框架符号的方法名称?

我正在运行 Xcode 5。

【问题讨论】:

  • 如果您想以这种方式调试 IPA,我认为唯一的方法是获取正确的堆栈跟踪(网上有关于如何使用 C 进行此操作的示例),然后使用相关的 dSYM 对其进行符号化.
  • 是的,我知道这一点,谢谢。我正在尝试调试不规则导致崩溃的问题。所以我不能依赖崩溃报告或重新创建崩溃,因为崩溃并不总是被触发,而是 NSManagedObjects 被不同的线程错误地访问。
  • 我认为您不必等待崩溃。 IIRC,好的 ol' C 有一些方法可以在运行时获取带有地址的堆栈跟踪。然后您可以手动(=编写脚本)将它们转换为符号。
  • @VladimirGritsenko 只有地址是不够的,请在下面阅读我的回答!
  • @VladimirGritsenko [NSThread callStackSymbols];记录地址和符号。

标签: ios debug-symbols


【解决方案1】:

您只会显示所有符号:

  1. 调试时
  2. 在生成完整的崩溃报告并表示它时。
  3. 使用 atos 手动对地址进行符号化,并在磁盘上使用相应的 dSYM 或系统符号(您需要为每个框架和二进制文件加载地址,这也是由于 Address space layout randomization。只有 callStackSymbols 不会显示这些)。见iOS crash reports: atos not working as expected

&lt;redacted&gt; 符号是一个

内存优化。 &lt;redacted&gt; 符号名称仅存储在磁盘上,这样可以在每个进程中节省一些物理内存和大量虚拟地址空间。

https://devforums.apple.com/thread/171264

总结一下:您可以在运行时使用任何调用来显示所有系统符号。相反,您需要通过让应用崩溃并分析其中的堆栈跟踪来创建完整的崩溃报告。

【讨论】:

  • 我在运行时得到了这些经过编辑的符号。
  • 正如我所描述的,这对于某些系统符号是预期的,请参阅我从 devForums 发布的解释。
  • 我已经在答案中发布了相关部分。您正在尝试做的是不可能
  • 好的,谢谢 :) 当问题并不总是导致崩溃时,这有点棘手。
  • 我的问题类似(iOS 9.3.x),但我看到的不是“”,而是不是我的符号,即使“存档”执行“临时” " build and Strip Debug Symbols During Copy for ad-hoc 是 NO。 (该应用程序已交付给 beta 测试人员,callStackSymbols 是 NSLog()-ed 到控制台。有什么想法吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多