By Jason Brennan
LLDB is the current state of the art for iOS debugging, but it’s clunky and cumbersome and doesn’t work well with objects. It really doesn't feel very different from
gdb. It's a solid tool but it requires breakpoints, and although you can integrate with Objective C apps, it's not really built for it. Dealing with objects is cumbersome, and it's hard to see your changes.
This is where Super Debugger comes in. It's a new tool for rapidly exploring your objects in an iOS app whether they're running on an iPhone, iPad, or the iOS Simulator, and it's available today on Github. Check over the included readme to see what it can do in detail.
Today we're going to run through a demonstration of an included app called
superdbrepository locally to your Mac and change into the directory.
git clone https://github.com/Shopify/superdb.git cd superdb
Open the included workspace file,
SuperDebug.xcworkspace, select the
Debug Metarget and Build and Run it for your iOS device or the Simulator. Make sure the device is on the same wifi network as your Mac.
Go back to Xcode and change to the
Super Debugtarget. This is the Mac app that you'll use to talk to your iOS app. Build and Run this app.
In Super Debug, you'll see a window with a list of running, debuggable apps. Find
Debug Mein the list (hint: it's probably the only one!) and double click it. This will open up the shell view where you can send messages to the objects in your app, all without setting a single break point.
Now let's follow the instructions shown to us by the Debug Me app.
In the Mac app, issue the command
.self(note the leading dot). This updates the
self pointer, which will execute a Block in the App delegate that returns whatever we want to be pointed to by the variable
self. In this case (and in most cases), we want
selfto point to the current view controller. For
Debug Me, that means it points to our instance of
DBMEViewControllerafter we issue this command.
Now that our pointer is set up, we can send a message to that pointer. Type
self redView layer setMasksToBounds:YES. This sends a chain of messages in
F-Scriptsyntax. In Objective C, it would look like
[[[self redView] layer] setMasksToBounds:YES]. Here we omit the braces because of our syntax.
We do use parentheis sometimes, when passing the result of a message send would be ambiguous, for example something like this in Objective C:
[view setBackgroundColor:[UIColor purpleColor]]would be
view setBackgroundColor:(UIColor purpleColor)in our syntax.
The previous step has no visible result, so lets make a change. Type
self redView layer setCornerRadius:15and see the red view get nice rounded corners!
Now for the impressive part. Move your mouse over the number
15and see it highlight. Now click and drag left or right, and see the view's corner radius update in real time. Awesome, huh?
That should be enough to give you a taste of this brand new debugger. Interact with your objects in real-time. Iterate instantly. No more build, compile, wait. It's now Run, Test, Change. Fork the project on Github and get started today.