How do I see every method called when I run my application in the iPhone Simulator?

前端 未结 3 417
天涯浪人
天涯浪人 2020-12-28 10:39

I would really like to see every method, delegate, notification, etc. which is called / sent while I run my app in the iPhone Simulator. I thought the righ

相关标签:
3条回答
  • 2020-12-28 11:06

    Assuming you're sure you want absolutely everything...

    1. Breakpoint objc_msgSend and objc_msgSend_stret. Almost all method calls use those two functions (mumble mumble IMP-cacheing).
    2. Okay, now your app drops into the debugger all the time. So click the auto-continue box.
    3. But now you don't see very much happening, so edit the breakpoints and add the command "bt" to get a backtrace.
    4. Drown in debug spam.

    This won't catch other C functions, of course.

    If you just want to catch notifications, you can do something like this (much less spammy):

    +(void)load
    {
      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleEveryNotification:) name:nil object:nil];
    }
    
    +(void)handleEveryNotification:(NSNotification*)notification
    {
      CFShow(notification);
    }
    

    Of course, notifications are done with normal method calls, so the first method will also show them (albeit in a big pile of spam).

    Delegates are not called or sent; they are just normal Obj-C method calls (strictly "message-sends", but that doesn't have the same ring to it).

    0 讨论(0)
  • 2020-12-28 11:14

    You can log out everything that is happening when your application is running using DTrace, a framework that lets you probe the inner workings of anything running on a modern Mac. We don't yet have DTrace on iOS, but it will work while you're running within the Simulator.

    I describe the fundamentals of DTrace in this article for MacResearch, then provide an example of a custom instrument you can build in Instruments using DTrace near the end of this article. That instrument logs out all methods called on all objects (even internal system ones) from the moment your application starts until it hits the end of -applicationDidFinishLaunching:.

    To simplify this, you can simply create a custom instrument using the Instrument | Build New Instrument menu item in instruments. Set up one of the probe descriptors to look like the following:

    alt text

    only ignore the isInApplicationStart and timestamp logging options. A simple probe responding to any Objective-C method in any class will log all of those messages to the Instruments console, which sounds like what you want for your debugging.

    0 讨论(0)
  • 2020-12-28 11:15

    If you put a breakpoint into your app, you can watch the call stack change while you step through the code. That's probably as close as you're going to come to what you have in mind.

    0 讨论(0)
提交回复
热议问题