iphone – 如何记录在iOS应用程序中使用的所有方法

iphone – 如何记录在iOS应用程序中使用的所有方法,第1张

概述我正在为客户接管iPad应用程序的开发。有大量的工作已经完成,我想拼凑整个事情是如何设计运行。 我想做的事情之一是记录哪些方法在应用程序运行时调用。我看到一个自定义的DTrace脚本,这意味着从启动时记录所有方法,但是当我在仪器中运行它没有得到任何结果。 记录方法的最好方法是什么? 灵感来自tc的一个类似问题 here,我放在一起调试断点 *** 作,将注销类和方法名称每次objc_msgSend()在您 我正在为客户接管iPad应用程序的开发。有大量的工作已经完成,我想拼凑整个事情是如何设计运行。

我想做的事情之一是记录哪些方法在应用程序运行时调用。我看到一个自定义的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应用程序中使用的所有方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1087744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存