Wednesday, January 2, 2008 [Tweets] [Favorites]

Logging Messages to Nil

Bill Bumgarner shows how to use the private _objc_setNilReceiver() function and -resolveInstanceMethod: to log the first time each selector is sent to nil. I imagine that by uncommenting the print statement in -forwardInvocation: this could be made to work with Objective-C 1.x, but you’d get a log entry for every message sent to nil.

Update: Bumgarner shows how to do the logging using Leopard’s DTrace.

Update 2: How to do it with Instruments.

1 Comment

It should "just work" against Tiger as the code was developed based on the information found in the darwin source's for Objective-C.

And, yes, you'll get lots and lots and lots of log output. Turns out that a surprising number of classes rely upon nil-eats-message!

However, it'd be easy to fix by adding a simple hash to the -forwardInvocation: to make it log once per selector. Just remember to do so in a thread safe fashion!

Stay up-to-date by subscribing to the Comments RSS Feed for this post.

Leave a Comment