我正在寻找一个框架,我不想深入了解它。
假设我的iPhone应用程序中有100多个类,包含1000多个方法。 在这种情况下,我想在每个类的每个方法(开始或结束或两者)中添加NSLog。
手动添加NSLog是可能的,但还有更好的解决方案吗? 就像以这样的方式构建应用程序,我可以添加此日志,而无需我进行手动工作。
谢谢和问候,
丹尼斯,
Your answer在许多论坛中最有用。 非常感谢。
我正在寻找类似这样的东西的原因是,我们有很多客户端项目,很多时候我们在QA和UAT时遇到了一些崩溃或其他问题。其中约80%不可再现或需要某些特定情况。我们使用.crash和dsym来跟踪这些问题。但在这种情况下它并没有那么有用。
我正在寻找的是提供额外的构建,它将记录用户所遵循的步骤,以便更容易重现这些问题。
目前我正在使用预编译的头文件和你提到的第一种方法(搜索第一个左大括号,然后用宏替换它)。
如上所述,我将研究DTrace和objc_msgSend。如果你有任何首选的教程,我会谷歌出去,这将很棒。
谢谢和问候, :d
答案 0 :(得分:1)
所以你想在你的代码中添加一个跟踪工具吗?
Apple没有提供这样的内容。您必须自己添加跟踪工具。如果您的源代码样式是一致的,这可能相对容易自动执行,例如在以减号(或加号)开头的行之后搜索第一个左大括号......
或者,您可能希望使用公共Objective-C运行时函数来枚举所有类及其所有方法,然后使用另一个类NSLog
进行方法调换,然后再跳转到原始类。
或者,您可以采用objc_msgSend
的开源实现,并在开头插入对NSLog
的调用。请注意,obj_msgSend
尾调用方法,这样可以防止您在返回时添加调用。当然要准备好大量的输出。您可能希望将对NSLog的调用调整为objc_msgSend
的selector参数值(例如公共前缀)。
最后,跟踪的最佳方法可能是将DTrace探针附加到objc_msgSend
的条目。对于上面提到的相同尾调用原因,您将无法将DTrace探针附加到其返回。
但更好的问题是为什么你想这样做。