2011-08-19 56 views

回答

2

我不确定对于某人尝试制作这样的静态分析工具而言,这是一个明智的做法 - 这会非常复杂,而且您可能会发现它只会找到函数的平凡示例不被称为 - 例如您在课程中创建的功能,并且您没有对它们的呼叫。所有与Cocoa交互的东西......问题是他们可能会在不同的环境中被调用。

在任何情况下,你应该真正感兴趣的是运行时代码覆盖率 - 因为这将告诉你(与测试一个体面的套装)实际上是正在使用的代码,这将是一个较小的子集。

+0

同意。这是一个棘手的问题,尤其是当您开始引入函数指针,回调和繁重的条件代码时。听起来像停止问题。 – Luke

+0

@Luke - 同意了,这个问题很有趣 - 思考它让我意识到这将是多么的艰难。也使用选择器和消息转发。为动态覆盖编制代码 - 不是微不足道的,但更容易看到你如何做到这一点。 – iandotkelly

+0

@iandotkelly:有趣的想法,动态地做。想到一些小问题:通过探查器运行你的代码一段时间,提取所有函数名称,并与TAGS数据库进行比较。这应该给你一些想法,哪些功能很少被调用或根本不会。这当然是随机的,决不是100%准确的,但是消除了许多实际调用的函数的检查。 – Arne

2

objc_cover会帮你察觉潜在的未使用的Objective-C的方法。

+0

这似乎只涵盖一个文件。是否有一个涵盖文件列表? – David

+0

你不给它一个源文件,你给它一个编译的二进制文件,它返回一个*潜在*未使用的选择器列表。 – 0xced

0

添加-Wunused-function到您的WARNING_CFLAGS名单。

这也考虑地址引用的功能(理想的正常使用)。然后使用gcc和clang编译您的程序以获得最佳覆盖率。

请注意,此标志并未涵盖所有情况(例如导出的函数),它主要关注具有内部链接的函数。使用stripnm可以帮助隔离外部符号 - 我不知道这个确切过程的好工具。

如果你想找到未使用的objc方法,你应该改写你的问题。

相关问题