当前位置:  开发笔记 > IOS > 正文

如何根据对象字符串属性在Xcode中设置条件断点?

如何解决《如何根据对象字符串属性在Xcode中设置条件断点?》经验,为你挑选了3个好方法。

我希望能够在调试器到达特定的字符串匹配时使其中断.举个例子,我可能会有这样的事情:

Foo myObj = [self gimmeObj];

myObj可能有一个叫做的属性name.我希望调试器在分配时停止

[myObj.name isEqualToString:@"Bar"];

如何在Xcode中设置条件断点来做到这一点?



1> Peter N Lewi..:

您可以通过正常设置断点在Xcode中设置条件断点,然后按住Control键并单击它并选择Edit Breakpoint(选择Run - > Show - > Breakpoints).

在断点条目中,有一个Condition列.

现在,有几个问题要记住这个条件.首先,gdb不理解点语法,因此必须使用[myObj name]而不是myObj.name(除非name是ivar).

接下来,与gdb中的大多数表达式一样,您必须告诉它返回结果的类型,即"BOOL".所以设置一个条件:

(BOOL)[[myObj name] isEqualToString:@"Bar"]

通常,通过临时添加以下代码,在代码中执行此操作通常更容易:

if ( [myObj.name isEqualToString:@"Bar"] ) {
    NSLog( @"here" );
}

然后在NSLog上设置断点.那么你的条件可以是任意复杂的,而不必担心gdb可以解析什么.


为了实现这一点,我不得不将(bool)大写为(BOOL),可能是LLDB.
除非通过更改代码,否则您将面临忘记删除日志记录或更改行为的风险
确实如此.我经常通过在字符串中添加"NYI"(尚未实现)来缓解此问题,然后我的预发布检查搜索NYI将会捕获它.
如果你有一个每200个游戏错误最终出现,你就不能把它放在代码中,现在你需要做一个条件断点.停止程序以更改代码不是一种选择.

2> nuynait..:

以下是使用XCode lldb条件断点的方法.

首先,双击断点(或右键单击edit breakpoint),可以看到弹出的对话框.

在此输入图像描述

以下是这些选项的含义:

    条件:断点只会在这种情况下触发.

    忽略:在触发断点之前条件需要满足的次数

    操作:断点断开后运行的操作.

    选项:评估操作后自动继续

这是一个总结.对于图像中的上述示例,这意味着当变量buildingId等于13时,在此处中断.如果我将忽略时间添加到1,那么它将忽略第一次buildingId等于13并在第二次满足条件时中断.

对于操作,当您按添加操作时,将会有一个选择列表.通常我所做的是使用Debugger Command po打印我需要检查的变量,我相信有更好的方法来使用我做的动作.

如果在运行时更改条件,似乎必须重新编译并运行应用程序



3> Adam Rosenfi..:

我不确定这是否可行,但您可以尝试在该行代码处设置断点,打开调试器控制台(Cmd + Shift + R),然后键入

condition N (int)[[myObj name] isEqualToString:@"Bar"]

其中N由断点的数量(整数)代替.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有