2012-09-25 54 views
7

的代碼應該不會有什麼影響 應該是可行的任何地方 它不會產生編譯器警告有一些在Objective-C無操作的操作,我們可以使用剛剛設置斷點

基本上有時候我想要做NSAssert。然而,如果我的自我有時想做我的自我,而不是NSAssert。這樣我就可以輕鬆設置或取消設定的中斷點

目前這就是我所做的。

if ([email protected]"Business") 
{ 
    error=nil; //Some code for breakpoint. I want something that do nothing actually. 
} 

這只是發生,我有一個名爲錯誤,我不會再使用的變量。但是,什麼是一個好的替代品

我也試過[無圈];但是有編譯器錯誤。

回答

7

試試這個:

while (false); 

還有其他的可能性,如if (false)甚至只是一個孤獨分號;一條線,但在這種情況下停止執行下一個指令,可能是因爲編譯器只是消除了這些代碼的空位。使用while的優點是,執行將停止在該行(假設您在那裏放置斷點)。

+0

都是很好的答案。這一個是最好的。 –

+0

如果我們不使用優化,'if(false)'和';'可以正常工作嗎? –

+1

@ BenC.R.Leggiero我不能肯定地說,但它不會花很長時間來嘗試。 – Caleb

2

你不直接比較2個字符串;嘗試[NSString isEqualToString:]

3

您可以給斷點條件,按住選項和命令,然後單擊斷點,您應該會彈出一個窗口。在「條件」字段喲可以輸入類似

[entityName isEqualToString:@"Business"] 

(請注意,您應該-isEqualToString:==比較字符串,因爲後者在字符串本身的特點比較指針沒有。)

通過使用斷點中的條件,您根本不需要if語句,還可以在不重新編譯的情況下啓用和禁用檢查。還有很多更可以用的斷點設置做的,像有它自動登錄的消息或運行調試器命令等

+0

我想要的東西,我可以清楚地看到在代碼中。 –

+0

我個人發現,在我的代碼中有很多調試條件是很痛苦的,因爲無論如何你都會很快失去它們所在的位置,然後不得不尋找它們進行生產,或者只是追查不同的錯誤。把所有的調試步驟,如打破,日誌記錄,提醒不正確的代碼狀態等等,我發現在Xcode斷點更方便。然後,我可以訪問它們的列表,輕鬆打開和關閉它們,除非明確提出,否則它們不會承諾對源代碼進行控制。但是每個人都有自己的編碼方式,你一定要使用你覺得最適合你的方式。 –

+0

其實你做的也是有意義的。只需重複這個條件。嗯...來源控制。我必須學會如何使用它。 –

0

可以使用__asm int 3;

if ([entityName isEqualToString:@"Business"]) { 
    __asm int 3; 
} 

CFInternal.h

#if defined(__ppc__) || defined(__ppc64__) 
#define HALT asm __volatile__("trap") 
#elif defined(__i386__) || defined(__x86_64__) 
#if defined(__GNUC__) 
#define HALT asm __volatile__("int3") 
#elif defined(_MSC_VER) 
#define HALT __asm int 3; 
#else 
#error Compiler not supported 
#endif 
#endif 
if ([entityName isEqualToString:@"Business"]) { 
    HALT; 
} 
+0

__asm int 3做什麼?沒有操作?如果它只是暫停,我希望它在斷點處完成。 –

+1

它會調用斷點中斷。 –

3

在C語言中,你可以有一個no-op指令乾脆把分號單獨一條線:

if (TRUE) { 
    ; // Neutral operation 
} 

在Objective-C,你可以做同樣的事情是你的程序停止下一行之前,你可以在這裏看到:

enter image description here

+0

優秀的提示。我想在評論中插入這樣一行代碼,以使代碼自我記錄:「此時不需要代碼」。 –

相關問題