【问题标题】:Should I be aiming for no analyzer results when I run Build and Analyze当我运行构建和分析时,我是否应该瞄准没有分析器结果
【发布时间】:2011-01-31 16:06:45
【问题描述】:

我已多次阅读“构建和分析”并不完美。当我运行它时,它确实提供了一些有用的信息,并且确实改进了我的代码,但它也给出了不必要的问题。此刻,我正在更改我的代码以尝试摆脱所有分析器结果,无论它们是否存在问题。这是最佳实践吗,因为就像警告一样,很容易检查您是否有问题,或者我应该认识到分析器并不完美,除非发现真正的问题,否则不要更改代码?

【问题讨论】:

  • 你能举例说明你所说的“有用”和“不必要的问题”是什么意思吗?

标签: cocoa xcode memory-leaks clang


【解决方案1】:

我认为上述答案的一个例外是当您使用垃圾收集时。在这种情况下,Analyzer 仍然会向您显示潜在的泄漏,但在使用 Garbage Collection 时它们自然不适用。

【讨论】:

  • 只有当你在 GC 支持(非必需)或保留释放模式下编译框架或在保留释放模式下编译应用程序时,它才会警告潜在的泄漏。但是,对于使用 GC 编译的应用程序,它只会评估该上下文中的代码。
【解决方案2】:

是的 - 理想情况下,您希望解决分析过程中提出的所有问题。

然而,虽然clang 很棒,但它并不完美。有时它可能会引发误报。如果您确定是这种情况,并且诊断错误,那么您应该尝试重新创建出现错误的最小可能测试用例,并将其提交给http://clang-analyzer.llvm.org/filing_bugs.html,以便他们改进分析引擎。

【讨论】:

    【解决方案3】:

    首先,所有编译器警告都只是错误,只会在运行时出现。它们不会阻止编译,但它们最终会在未来的某个地方造成严重的问题。您应该进入构建设置并检查“将警告视为错误”并随时修复由此产生的错误。否则,您最终将难以调试问题。

    分析仪并不完美,但您应该仔细检查它发现的任何问题。它在您的代码中发现的任何问题都应该得到修复。有时它会从 API 报告错误,并且可能对此无能为力。

    在大多数情况下,忽略来自任何编译器阶段的错误都是“明智之举,愚蠢之举”的时间节省。您预先保存的任何时间都将在以后丢失调试。

    【讨论】:

    • 是的,我喜欢把静态分析器想象成一个超级编译器,它会给我编译器看不到的警告/错误。话虽这么说,它并不完美,我已经看到了一两个误报,但 99% 的时间都是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多