2012-05-03 48 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