How to set a conditional breakpoint in Xcode based on an object string property? How to set a conditional breakpoint in Xcode based on an object string property? xcode xcode

How to set a conditional breakpoint in Xcode based on an object string property?


You can set a conditional break point in Xcode by setting the breakpoint normally, then control-click on it and select Edit Breakpoint (choose Run -> Show -> Breakpoints).

In the breakpoint entry, there is a Condition column.

Now, there are several issues to keep in mind for the condition. Firstly, gdb does not understand dot syntax, so instead of myObj.name, you must use [myObj name] (unless name is an ivar).

Next, as with most expressions in gdb, you must tell it the type of return result, namely "BOOL". So set a condition like:

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

Often it is actually easier to just do this in code by temporarily adding code like:

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

and then setting the break point on the NSLog. Then your condition can be arbitrarily complex without having to worry about what gdb can and can't parse.


Here is how you do using XCode lldb conditional breakpoints.

First, double click the breakpoint (or right-click edit breakpoint), you can see a dialogue popup.

Updated 2021-04-22 for Xcode 12:enter image description here

Here is what these options means:

  1. Condition: The breakpoint will only fire under this condition.
  2. Ignore: The amount of times the condition needs to meet before fire the breakpoint
  3. Action: Action that runs after the breakpoint breaks.
  4. Options: Automatically continue after evaluating actions

Here is a summary. For the above example in the image, it means that when the variable testedString is equal to "Testing", break here. If I add ignore time to 1, then it will ignore the first time when testedString is equal to "Testing" and break at the second time the condition is met.

For actions, when you press add actions, there will be a list of choices. Usually what I do is to use the Debugger Command po to print variables that I need to check and I believe that there are better ways using the actions than I do.

It seems that you have to recompile and run the app if you change the conditions at runtime


I'm not sure if this will work, but you can try setting a breakpoint at that line of code, open up the debugger console (Cmd+Shift+R), and type

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

Where N is replaced by the number of the breakpoint (an integer).