8

我使用 Xcode 4.3.2 和 lldb 作为我的调试器。

我继承了一个项目,其中包含从辅助线程调用 UIKit 的代码,如以下日志消息所示:

2012-05-02 21:48:14.603 Appname Dev[77594:16e0f] void _WebThreadLockFromAnyThread(bool), 0x8d5f810: 从主线程或 Web 线程以外的线程获取 Web 锁。不应从辅助线程调用 UIKit。

我已经清理了从辅助线程进行 UIKit 调用的大部分代码,但我仍然偶尔会在日志中看到此消息。该应用程序没有崩溃,因此很难确定问题所在。

我想在 上设置断点_WebThreadLockFromAnyThread,但是当我尝试使用以下方法设置符号断点时:

b _WebThreadLockFromAnyThread

调试器告诉我:

断点设置 --name '_WebThreadLockFromAnyThread' 断点已创建:12:名称 = '_WebThreadLockFromAnyThread',位置 = 0(待定)警告:无法将断点解析到任何实际位置。

我还尝试使用断点导航器中的 UI 创建符号断点,但我不确定为模块输入什么。当我将模块留空时,会创建断点,但当日志消息出现在调试控制台中时它仍然没有中断。

谁能告诉我如何在 上添加断点_WebThreadLockFromAnyThread,以及如何确定该符号的定义模块是什么?

4

3 回答 3

3

只需省略下划线即可。b WebThreadLockFromAnyThread 在 lldb 和 gdb 中都适用于我。现在,这是 Xcode 4.6,所以如果你坚持使用旧版本,我想可能是 4.6 中不存在该版本的问题。

于 2013-03-16T01:57:57.693 回答
0

您可以尝试使用 nm 命令或 class-dump 工具来定位模块。

于 2012-05-11T01:40:53.333 回答
0

很可能没有您需要的符号,因为默认情况下 xcode 会生成一个“发布”版本,如果我是正确的,它会剥离使 exec 文件更小的符号。我现在不确定如何,但您需要找到切换到“调试”构建的选项,这将保证所有这些可爱的符号都在等待您的分析。

于 2012-05-18T20:20:04.583 回答