在objective-c中是否有一些不可操作的操作可以用来设置断点

在objective-c中是否有一些不可操作的操作可以用来设置断点,objective-c,xcode4.3,noop,Objective C,Xcode4.3,Noop,代码不应该有任何影响 这应该是可行的任何地方 它不会生成编译器警告 基本上有时候我想做NSAssert。然而,有时我想做我自己,而不是NSAssert。这样我就可以轻松设置或取消设置断点 现在我就是这么做的 if (entityName==@"Business") { error=nil; //Some code for breakpoint. I want something that do nothing actually. } 碰巧我有一个名为error的变量,我将不再使用它。但

代码不应该有任何影响 这应该是可行的任何地方 它不会生成编译器警告

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

现在我就是这么做的

if (entityName==@"Business")
{
    error=nil; //Some code for breakpoint. I want something that do nothing actually.
}
碰巧我有一个名为error的变量,我将不再使用它。但有什么好的选择呢


我也试过[什么都不做];但这导致了编译器错误。

您不能直接比较两个字符串;尝试[NSString isEqualToString://p>您可以为断点提供条件,按住option和command并单击断点,您应该会得到一个弹出窗口。在“条件”字段中,您可以输入如下内容

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


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

您可以使用
\u asm int 3

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


在C语言中,只需在一行中单独放一个分号,就可以得到一条无运算指令:

if (TRUE) {
  ; // Neutral operation
} 
在Objective-C中,您也可以这样做,问题是您的程序在下一行之前停止,如您所见:

试试这个:

while (false);

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

asm int 3的作用是什么?没有行动?如果只是停下来,我希望在断点前完成。所有这些都是很好的答案。这一个是最好的。将
if(false)
如果我们不使用优化,可以正常工作吗?@BenC.R.Leggiero我不能肯定,但尝试它不会花很长时间。我个人觉得在我的代码中有很多调试条件是一件痛苦的事情,因为你很快就忘记了它们到底在哪里,然后不得不寻找它们进行生产,或者只是跟踪一个不同的bug。将所有调试步骤,如中断、记录日志、警告错误的代码状态等放在xcode断点中,我发现更方便。然后,我可以访问它们的列表,轻松地打开和关闭它们,并且它们不会被提交到源代码管理,除非明确指定。但是每个人都有自己的编码方式,你一定要用你认为最适合你的方式,实际上你所做的也很有意义。重复这个条件。隐马尔可夫模型。。。源头控制。我得学会如何使用它。很好的提示。我想插入这样一行注释,使代码自文档化,“此时不需要代码”。
while (false);