簡體   English   中英

Xcode斷點在dispatch_async塊內不起作用

[英]Xcode breakpoint don't work inside dispatch_async block

我們的團隊非常需要幫助解決我們面臨的以下問題,因為它阻止我們調試dispatch_async塊中的一些代碼。

希望我會得到一些關於下一步該怎么做的幫助或建議。

我們面臨的問題如下:

我們最近遇到了一個奇怪的問題,在Xcode 6中,我們無法在dispatch_async塊中中斷。

- (void)viewDidLoad {

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);    

        dispatch_async(queue, ^{


        BOOL setRtn = TRUE;  //<- break point is set here but never break

        //call to function
        BOOL setFn = some_function();
        });

} 



- (BOOL) some_function()
{
     BOOL test = YES;   <- break point set here, breakpoint break!


     return test;
}

當我們在dispatch_async塊的任何行內設置斷點時,代碼永遠不會中斷,斷點永遠不會起作用。

但是,如果我們在dispatch_async塊調用的函數中設置斷點,則斷點有效!

還有其他人面臨同樣的問題嗎?

我們正在使用Xcode 6.1並正在開發IOS8.1

請幫助,一直瘋狂試圖解決這個問題好幾天。

事實證明,這是因為第三方框架New Relic。 刪除對New Relic框架的引用后,我們可以進入dispatch_async塊。

因此,對於任何處理具有新relic插件的項目的開發人員,您可以臨時刪除對插件的引用,並在稍后調試ID完成時將其添加回來。

我們花了幾天時間才發現,我們希望這條信息對每個人都有幫助。

事實證明,Grand Central Dispatch工具確實可以防止dispatch_async塊中的斷點。 您可以通過在prefix.pch文件中添加以下內容來禁用環境中的GCD宏:

#ifdef DEBUG
#undef dispatch_async 
#undef dispatch_sync 
#undef dispatch_after 
#undef dispatch_apply 
#undef _dispatch_once 
#endif

根據配置的構建優化級別 ,該行可以以不可能中斷的方式進行編譯(如果您不在塊中使用該變量,甚至可以從編譯器輸出中刪除它)。

嘗試在構建設置中將優化設置為-O0

我理解它沒有多大意義,但對我來說, Clean build文件夾的舞蹈與一些不在斷點處停止的DispatchQueue.main.async中包含的Swift 4.2代碼一起工作; 在清理和重建之后,它現在按預期打破了。

我正在使用Xcode 10.1,我的優化級別構建設置已經是非-O0,如其他答案所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM