2012-05-03 28 views
7

我使用Xcode 4.3.2和lldb作为我的调试器。如何在Xcode的_WebThreadLockFromAnyThread上设置符号断点?

我继承其包含从辅助线程调用的UIKit代码的项目,如由这些日志消息:

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

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

我想设置一个断点上_WebThreadLockFromAnyThread,但是当我尝试使用设置一个断点符号:

b _WebThreadLockFromAnyThread 

调试器告诉我:

断点设置--name“ _WebThreadLockFromAnyThread'Breakpoint created:12:name ='_WebThreadLockFromAnyThread',locations = 0 (pending)警告:无法将断点解析为任何实际的 位置。

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

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

回答

2

只留下下划线。 b WebThreadLockFromAnyThread适用于lldb和gdb。现在,这是Xcode 4.6,所以如果你坚持使用旧版本,我想这可能是4.6版本中没有的问题。

+0

太棒了,非常感谢!我最终使用了下面类似的命令,它也设置了一个条件,只有在主线程之外调用该函数时才会中断:'break set -n WebThreadLockFromAnyThread -c'(BOOL)[NSThread isMainThread]'' – Greg

0

您可以尝试使用nm命令或类转储工具来查找模块。

+0

我尝试在Xcode生成我的应用程序时生成的可执行文件上使用nm,但符号不在其中。 – Greg

0

最有可能没有你需要的符号,因为默认情况下xcode会产生一个“释放”版本,如果我正确的话剥离使得exec文件更小的符号。我不确定目前如何,但您需要找到切换到“调试”构建的选项,这将保证让所有那些可爱的符号等待您的分析。

+0

我正在使用将“复制期间去除调试符号”设置为“否”的版本。 – Greg