我真的希望看到在iPhone模拟器中运行我的应用程序时调用/发送的每个方法,委托,通知等.我认为正确的地方是调试器,但我找不到合适的设置.
我的目标是在后台看到所有发生的事情,例如,我向UITableView添加一行或从我的UINavigationController中按下"后退"按钮.
这将有助于弄清楚当应用程序中的某些内容发生时,或者当用户按下按钮,更改视图等时要使用的委托.
是否有可能获得此信息?
您可以使用DTrace注销应用程序运行时发生的所有事情,DTrace是一个框架,可让您探测在现代Mac上运行的任何内容的内部工作方式.我们还没有DTrace的iOS上,但是当你在模拟器中运行它会奏效.
我描述的DTrace的基本面本文为MacResearch,然后提供你可以建立在使用DTrace附近的高端仪器的自定义仪器的例子这篇文章.该文书注销所有要求的那一刻起所有对象(甚至系统内部的)方法的应用程序启动,直到它击中结束-applicationDidFinishLaunching:.
为简化此操作,您只需使用仪器中的Instrument | Build New Instrument菜单项创建自定义仪器即可.设置其中一个探测描述符,如下所示:

仅忽略isInApplicationStart和时间戳记录选项.响应任何类中的任何Objective-C方法的简单探针会将所有这些消息记录到Instruments控制台,这听起来就像您想要的调试一样.
假设你确定你想要绝对一切 ......
objc_msgSend和objc_msgSend_stret.几乎所有方法调用都使用这两个函数(mumble mumble IMP-cacheing).当然,这不会捕获其他C函数.
如果你只想捕获通知,你可以做这样的事情(更不用说垃圾邮件了):
+(void)load
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleEveryNotification:) name:nil object:nil];
}
+(void)handleEveryNotification:(NSNotification*)notification
{
CFShow(notification);
}
Run Code Online (Sandbox Code Playgroud)
当然,通知是通过普通方法调用完成的,因此第一种方法也会显示它们(虽然是大量的垃圾邮件).
代表不会被打电话或发送; 它们只是普通的Obj-C方法调用(严格来说是"消息发送",但它没有相同的响铃).
| 归档时间: |
|
| 查看次数: |
3014 次 |
| 最近记录: |