Posted in February 2010

Learn Yourself to Debug Good With XCode and Instruments

by

Hi! (Here Roger pretends it hasn’t been 100 years since his last posting and moves on swiftly.) So if you’ve been learning or practicing iPhone development, you might agree with me that there’s one topic that inspires a little FUD and that is covered a little sparsely by books — debugging. Between scary messages like EXC_BAD_ACCESS, uncaught exceptions deep in the guts of thorny disassembled framework code, crashes that don’t break into the debugger, and the direct interface to the gdb console, debugging in XCode can have a learning curve even if you know your way around a debugger. I’ve seen too many good men use NSLog() to debug, and it bugs me.

So here’s a few screencasts I found around town on debugging, that I wanted to share. Do yourself a favor and watch them.

First up, a series of two screencasts by Jeff LaMarche on debugging basics. I’ll reiterate, even if it starts out basic, you might learn something since it seems everyone uses the debugger differently. Part One, Part Two. Key takeaways:

  • Dude. Just drag the breakpoint out of the gutter to remove it. I’ve been right-clicking the damn thing my whole life. Sighhh….
  • XCode breakpoints are heckuv powerful. Use symbolic breakpoints, conditional breakpoints, and breakpoint actions wisely.
  • Single most important thing: Add a symbolic breakpoint on objc_exception_throw. Newer XCode builds have a menu item for this in Run→Stop on Objective-C Exceptions.

Next, a screencast on debugging EXC_BAD_ACCESS, which is raised when you access an object that has vanished into thin air, most likely because you over-released it. This screencast from Mark Johnson shows you how to debug these errors with Instruments and NSZombies. You’ll see how to generate a complete history of any object, from allocation and including every release or retain. You’ll also see how to find the objects of interest by enabling zombies (you know, after your object is completely released and freed it sticks around, undead). For those of you who see Instruments and aren’t quite sure what to do with it, just watching Mark use it is helpful. My takeaway was that it’s much easier and nicer to use Instruments than to enable zombies by hand.

Finally, here’s a nice tutorial by Owen Goss on using Instruments to find memory leaks. It’s also another good scenario which you can follow to help get your head around Instruments.

Bonus info: XCode 3.2 and later has the Clang Static Analyzer built in. This is a sweet tool that analyzes your code without running it (thus the static part). Just run Build→Build and Analyze and you’ll get a brutal report of how and where Clang thinks your code is totally sketchy. John Muchow shows you how here.

Anything that still baffles you about XCode/iPhone debugging? Care to add any other beginner debugging help? Hit the comments!

KitchenSync Version 2.0 is now available!

by

I’m very proud to announce that the second version of KitchenSync has arrived! What started as a labour of love about 3 years ago has finally gotten its first much needed upgrade. Just about everything in this version is newer and more streamlined. The entire system for greater simplicity and practical functionality.

This version will not be backwards compatible, however, there’s finally some Decent Documentation!!! There’s also a new blog devoted to KS.

GO GET IT NOW!

Here’s some of the new features. You can view all of them by checking out the change log.

  • Usability
    • REFACTORED all classes with usability and stability in mind.
    • UPDATED all ASDocs
    • ADDED several new methods in the TweenFactory for easy tween creation.
  • Synchronizer and Time
    • REFACTORED The way time is handled throughout.
    • ADDED ISynchronizerCore and example core classes. This allows advanced users to switch between different methods of timing (e.g. enterframe or timer based)
    • ADDED FrameRateUtil for getting instantaneous and averaged framerates of the system. The FrameRateView now makes use of this class and has more options.
  • Action Architecture
    • REFACTORED action classes and extracted several interfaces from them.
    • ADDED jumpToTime and jumpByTime functionality to actions.
    • ADDED Looping via a new group called KSLooper.
    • REMOVED complicated and rarely used action triggers from AbstractAction.
    • ADDED togglePause() method and progress variable to AbstractAction (for getting percentage complete of an action).
  • Tweens
    • CHANGED constructors in KSTween. Emphasis is now on using TweenFactory.
    • IMPROVED Object parser in TweenFactory
  • Action Groups
    • ADDED Syntactic sugar to the group constructors. using an array in the constructor for a parallel group adds a sequence and vice versa.
    • ADDED totalDuration to groups to show the duration of all child actions in a group.
    • ADDED KSRandomGroup.
    • REMOVED KSSteppedSequenceGroup because it seemed kinda useless.
  • Loading Actions
    • REFACTORED Loading actions. Now they’re much easier to use and more powerful.
    • ADDED KSLoadQueue for quickly creating a class to load files from the network in a batch.
    • ADDED the resultList property to the ILoaderAction interface so that you can quickly access the loaded files in a batch.
  • Misc
    • RENAMED several classes and reworked package structure
    • ADDED KSAsynchronousIteration for running processor-intensive for loops spaced out over a period of time so that they are essentially asynchronous.
    • FIXED several minor and major bugs.
Tagged , , , ,