7

代码不应该有任何效果它应该在任何地方都可以使用它不会产生编译器警告

基本上有时我想做NSAssert。但是,有时我不想做 NSAssert,而是做我的 if {} 我自己。这样我就可以轻松设置或取消设置断点

目前这就是我所做的。

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

只是碰巧我有一个名为 error 的变量,我将不再使用它。但是什么是好的选择

我也试过 [nil donthing]; 但这得到了编译器错误。

4

5 回答 5

8

试试这个:

while (false);

还有其他可能性,比如if (false)甚至只是一行带有单独的分号;,但在这些情况下,执行会在下一条指令处停止,可能是因为编译器只是消除了那些空的代码位。Usingwhile的优点是执行将在该行停止(当然,假设您在那里放置了一个断点)。

于 2012-09-25T09:12:44.747 回答
3

您可以给出断点条件,按住选项和命令并单击断点,您应该会弹出一个窗口。在“条件”字段中,您可以输入类似

[entityName isEqualToString:@"Business"]

(请注意,您应该将字符串与-isEqualToString:not==进行比较,因为后者比较的是指针而不是字符串本身中的字符。)

通过在断点中使用条件,您根本不需要 if 语句,并且无需重新编译即可启用和禁用检查。您可以使用断点设置做更多事情,例如让它自动记录消息或运行调试器命令等。

于 2012-09-25T08:51:36.127 回答
3

在 C 中,您可以有一个无操作指令,只需将分号单独放在一行中:

if (TRUE) {
  ; // Neutral operation
} 

在 Objective-C 中你可以做同样的事情,问题是你的程序在下一行之前停止,你可以在这里看到:

在此处输入图像描述

于 2012-09-25T09:03:21.633 回答
2

您不直接比较 2 个字符串;试试 [NSString isEqualToString:]

于 2012-09-25T08:45:59.067 回答
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;
} 
于 2012-09-25T08:59:03.390 回答