我应该依赖Clang静态分析仪还是仪器?

时间:2009-11-05 10:45:07

标签: iphone memory-leaks

我正在开发iPhone应用程序..

为了找到内存泄漏,我已经使用仪器启动了应用程序,这给了我很多泄漏。我无法理解然后在某个地方的某个论坛上我已经读到这些仪器会在某个时候发生虚假泄漏,所以我应该从静态分析开始。

然后我使用了Clang Static分析器,解决了我的应用程序在静态分析视图中没有错误后只给了我7个错误。

两种分析泄漏都不同。

如果我仍然使用仪器进行测试,它仍然会泄漏。

所以我的问题是我应该依赖clang Static Analyzer结果还是仪器 结果..

4 个答案:

答案 0 :(得分:5)

它们是免费工具,以两种截然不同的方式发现代码中的问题。你应该同时使用它们。

答案 1 :(得分:1)

CLANG说“没有结果”并不意味着你没有错误。这意味着“CLANG”找到了它能找到的所有问题。就像漏洞工具找不到你认为是漏洞的所有问题一样,因为它有一些它无法检测到的东西,它只能在运行它时实际测试的应用程序区域中找到问题......

将应用程序中作为大象的错误的整体状态,以及XCode中的各种调试工具想象成一个稳定的盲人来尝试掌握它的形状。有足够的盲人投掷大象,你最终会接近你所遇到的任何问题的形状。这就是为什么你必须使用所有可能的工具。

要获得额外的CLAG清理能力,请将编译器类型设置为CLANG / LLVM。您只能使用该设置编译模拟器,但与静态分析器一起使用时,可以发现更多问题。

答案 2 :(得分:1)

你不应该依赖于其中一个,他们都做了非常不同的事情。在测试之前使用clang来发现潜在的问题,然后使用仪器进行测试。

此外,请确保您使用模拟器和设备。如果您遵循内存管理最佳实践,您很少会发生泄漏,但是铿锵声和仪器是追踪可能蔓延的泄漏的有用工具。

答案 3 :(得分:0)

Clang是一个静态分析器,它在编译时工作,以确保代码中的内存管理实践。但Instrument是用于设备内存运行时分析的工具。

只有在iOS设备中启动应用程序时才能使用仪器。在iOS模拟器中启动应用程序时,不应使用仪器。

为了提供更好的iOS应用,我们应该依赖Clang静态分析仪和仪器。