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
Stay up-to-date by subscribing to the Comments RSS Feed for this post.
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!