我想做的事情之一是记录哪些方法在应用程序运行时调用。我看到一个自定义的DTrace脚本,这意味着从启动时记录所有方法,但是当我在仪器中运行它没有得到任何结果。
记录方法的最好方法是什么?
解决方法 灵感来自tc的一个类似问题 here,我放在一起调试断点 *** 作,将注销类和方法名称每次objc_msgSend()在您的应用程序中触发。这与我在 this answer中描述的DTrace脚本类似。要启用此断点 *** 作,请创建一个新的符号断点(在Xcode 4中,转到断点导航器并使用窗口左下角的加号创建一个新的符号断点)。使符号为objc_msgSend,将其设置为在评估 *** 作后自动继续,并使用以下命令将 *** 作设置为调试器命令:
printf "[%s %s]\n",(char *)object_getClassname(*(long*)($esp+4)),*(long *)($esp+8)
你的断点应该看起来像下面这样:
当应用程序运行时,应该注销这样的消息:
[UIApplication sharedApplication][UIApplication _isClassic][NSCFString getCString:maxLength:enCoding:][UIApplication class][SLSMoleculeAppDelegate isSubclassOfClass:][SLSMoleculeAppDelegate initialize]
如果你想知道我在哪里获取内存地址,请阅读Objective-C运行时内部的this Phrack article。上面的内存地址只会对模拟器工作,所以你可能需要调整这个来运行在iOS设备上的应用程序。 Collin建议在his answer中对设备运行以下修改:
printf "[%s %s]\n",(char *)object_getClassname($r0),$r1
此外,我想你会看到,注销应用程序中调用的每个方法将压倒你的信息。你可能可以使用一些条件来过滤这个,但我不知道这是否会帮助你了解你的代码如何执行。
总结以上是内存溢出为你收集整理的iphone – 如何记录在iOS应用程序中使用的所有方法全部内容,希望文章能够帮你解决iphone – 如何记录在iOS应用程序中使用的所有方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)