例如,UIViewControlleriOS中的对象在向用户显示其视图之前会收到许多消息:
viewWillAppearviewWillLayoutSubviewsviewDidLayoutSubviewsviewDidAppear因为框架的源代码是不可见的,我们必须依赖书籍或博客,或者是否有办法打印或监控发送到该对象的所有消息(1)Objective-C,或(2)任何工具?
我真的希望看到在iPhone模拟器中运行我的应用程序时调用/发送的每个方法,委托,通知等.我认为正确的地方是调试器,但我找不到合适的设置.
我的目标是在后台看到所有发生的事情,例如,我向UITableView添加一行或从我的UINavigationController中按下"后退"按钮.
这将有助于弄清楚当应用程序中的某些内容发生时,或者当用户按下按钮,更改视图等时要使用的委托.
是否有可能获得此信息?
假设我有一个基于Cocoa的Mac或iOS应用程序.我想在我的应用程序的源代码 或我的应用程序的二进制文件上运行静态分析器,以检索其中调用的所有Objective-C方法的列表.有没有可以做到这一点的工具?
几点:
我正在寻找静态解决方案.我不是在寻找动态解决方案.
可以对二进制代码或源代码运行的东西是可以接受的.
理想情况下,输出只是一个大规模的Objective-C方法列表,如:
… -[MyClass foo] … +[NSMutableString stringWithCapacity:] … -[NSString length] …(如果它没有减少那么酷)
如果存在其他类型的符号(C函数,静态变量等),那很好.
我熟悉class-dump,但是AFAIK,它将声明的Classes转储到二进制文件中,而不是二进制文件中的被调用方法.那不是我想要的.如果我错了,你可以用类转储这样做,请纠正我.
我不完全确定这是可行的.所以,如果不是,那也是一个很好的答案.:)
我正在追踪一个OS X应用程序,我希望可以在iOS上找到这样的方式:
有办法这样做吗?我试过了
expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8) )
Run Code Online (Sandbox Code Playgroud)
我认为OS X使用的是64位寄存器.所以这个命令不起作用(实际上,它不起作用).我该怎么写这个命令?或者有一个简单的方法来做同样的事情?只是跟踪调用的类和方法