Under the Bridge

Roundup: Debugging Goodies

So there’s been a number of interesting tools, tips, and tidbits of the fixing and fussing sort floating by recently, let’s collect them all up shall we?


PonyDebugger we’ve mentioned before but can’t do enough; network traffic debugging, Core Data browsing, view hierarchy displaying, so cool it’s downright frosty.

superdb: The Super Debugger by @jasonbrennan brings real time dynamism to your debugging:

The Super Debugger (superdb for short) is a dynamic, wireless debugger for iOS (and theoretically, Mac) apps. It works as two parts: a static library that runs built in to your app and a Mac app to send commands to the app, wirelessly. Your app starts up the debugger via this library, which broadcasts itself on your local network. The Mac app can discover these debug sessions via Bonjour and connect to them.

You can then send messages to your live objects as the app is running on the device (or Simulator). No need to set any break points. Any message you can send in code can also be sent this way. This allows you to rapidly test changes and see their results, without the need to recompile and deploy.

The debugger will even let you rapidly resend messages involving numeric values. When trying to tweak an interface measurement, for example, you can just click and drag on the value and see the changes reflected instantly on the device…

Between the two, that’s enough coolness to send global warming shuddering into reverse, doncha think?

markd2 / GestureLab is good stuff for debugging gesture recognizers.

UIView+DTDebug.m detects those annoying background drawing calls that always seem to slip in somewhere.

garnett / DLIntrospection makes examining objects at runtime convenient.

Which reminds us of the DCIntrospect UIKit interface examiner you might have forgotten our last mention of.

Did you know weak properties are not KVO-compliant? Debug usage of Objective-C weak properties with KVO.

The debugger of royalty introduces

… step one on the road to sanity: the debug proxy. This is useful when you want to find out how a particular class gets used, e.g. when it provides callbacks that will be invoked by a framework. You can intercept all the messages to the object, and inspect them as you see fit…

tomersh / NanoProfiler is a super lightweight individual function profiler.

siuying / IGWebLogger is a CocoaLumberjack logger which logs to the web in realtime.

Log Leech is a nifty-looking log formatter “Because System Logs Should be Beautiful.” Indeed.


Debugging Tips video presentation is the single best introduction to the basics we’ve seen (h/t: iosdevweekly!)

How to Use Instruments in Xcode is an excellent introduction to that, should you need one.

Intermediate Debugging with Xcode 4.5 has good stuff on leveraging breakpoints.

Xcode LLDB Tutorial introduces how to use predicates and KVC in the debugger;

Querying Objective-C Data Collections is the don’t-miss followup.

Stack-trace-dumping regular-expression-based symbolic breakpoints in LLDB

Hooked on DTrace, part 1 and part 2 and part 3 and part 4 are must-reading for when you want to get below the Instruments level. Also check the comments for pointers to good stuff like Top 10 DTrace scripts for Mac OS X and this DTrace book.

Analysing iOS App Network Performances on Cellular/Wi-Fi shows how to create HAR files so as to take advantage of its various nifty helper tools.

There’s somewhat of a certain symmetry here: going down just as far down as it’s possible to go debugging in “Assembly Dissembling” was what the first post we made after signing up to guide development of the Atimi Mobile Sports Framework was about, and after doing so from support of seven teams and two sports to thirteen teams and five sports across iOS, Android, and BlackBerry 10, it’s about time to shake things up a bit; and here we are, our first post after leaving is about debugging too! Great place for a full time job, Atimi, we encourage you to check out their positions if you’re looking for one; but we’re off now to focus on a more equity-involving opportunity. Not completely, though, a little variety on the menu is always welcome; so if you have any little bite-sized projects that need some chewing, drop us a line and we’ll see what we can fit in!


MGBenchmark for timing operations hard to profile with Instruments

This Xray Editor “The missing visual feedback tool for iOS developers” looks mighty cool.

This Spark Inspector thingy looks even more cool than that.

You can now use the Spark Inspector from Xcode, just like Instruments.

Reveal is another inspector tool.

Integrating Reveal without modifying your Xcode project

Symbolic breakpoint for dynamically linking libReveal

Reveal Tutorial: Live View Debugging

Tool For Quickly Launching, Deleting And Seeing Details Of iOS Simulator Apps

To avoid debugging unavailable or obsolete API usage, try DeployMate.

Debugging Smashed Memory in Obj-C

SimulatorRemoteNotifications “is an iOS library to send (fake) remote notifications to the iOS simulator.”

SimPholders: “A small utility for fast access to your iPhone Simulator apps.”

Easy To Use GUI Tool For Debugging iOS Push Notifications

Open Source Tool For Debugging iOS User Interfaces Featuring A 3D Viewer And More

Open Source Tool That Enables Code Tweaking In Running iOS Apps

thread_return.py “Prints the return value of the last function you stepped out from.”

Automating OS X App Test Build Distribution Across Multiple OS Versions

gist:8213806: “Cute macro from Kyle Van Essen to provide compiler errors for key paths which do not exist.”

Open Source iOS Library For Easy Bug Reporting With Screenshots, Logging, Annotations, And More

There are Only Four Billion Floats–So Test Them All!

applogger.io “is the perfect platform for receiving information about your apps from the field.”

NSHipster on Benchmarking talks about the private dispatch_benchmark.

heardrwt / RHObjectiveBeagle “is an Objective C debugging tool that can sniff out class instances on the heap.”

Paw 2 – The Missing HTTP & REST API Tester For Mac

FLEX (Flipboard Explorer) “is a set of in-app debugging and exploration tools for iOS development.”

iOS Console: “The most awesome iOS console log viewer. Ever.”

chisel “is a collection of LLDB commands to assist debugging iOS apps.”; Printing Objective-C Invocations in LLDB

objc.io #19: Debugging

Tutorial: An Introduction To The New View Debugging Features In Xcode 6

How To Use The 3 Instruments You Should Be Using

UIKitDebugging: “A set of files that enables various debug flags in UIKit.”

Quick Look Debugging

View Debugging in Xcode 6; Xcode 6’s View Debugger

jspahrsummers / GHRunLoopWatchdog.h: “A class for logging excessive blocking on the main thread.”

swiftrsrc “generates Swift code for accessing elements of asset catalogs, storyboards, and color lists in order to avoid the error-prone practice of hardcoding strings into your code. It is heavily inspired by Square’s objc-codegenutils, which you should definitely look into if you’re working on an Objective-C project.”

13 Xcode Tips That Will Help You Conquer Xcode; Spicing Up Xcode; Xcode 6 Tips: Vector Images, Code Snippets and Many More

Tool: Xcode Plugin For Easy Tweaking Of CAMediaTimingFunction Control Points

MustOverride: “Provides a macro that you can use to ensure that a method of an abstract base class *must* be overriden by its subclasses.”

Enable Clang Modules, Disable Auto Linking

WBWebViewConsole: “In-App debug console for your UIWebView & WKWebView.”

Alpha: “the next generation debugging tool for iOS applications. It started as an unofficial fork from FLEX (Flipboard Explorer), but continued to be actively developed and grow exponentionally.”

How to easily inspect the return value of methods with breakpoints and Xcode’s debugger

Disk I/O Debugging

An @import-ant Change in Xcode; auto-continuing breakpoint with debugger commands