C ++代码分析工具

时间:2009-02-13 16:41:40

标签: c++ code-analysis

我目前正在学习C ++,因为我还在学习,我一直在犯错误。
使用像C ++一样宽松的语言,通常需要花费很长时间才能确切地知道出错了什么 - 因为编译器让我可以侥幸逃脱。我意识到这种灵活性是C ++的主要优势之一,但它使得学习基本语言变得困难 是否有一些工具可用于分析我的代码并根据最佳实践或合理编码提出建议?最好是作为Eclipse插件或linux应用程序。

8 个答案:

答案 0 :(得分:17)

启用最大编译器警告(如果您使用的是Gnu编译器,那就是-Wall选项。)

'Lint'是典型的静态分析工具。

valgrind是一个很好的运行时分析器。

答案 1 :(得分:6)

我认为你最好有一些关于良好实践的讲座以及为什么它们是好的。这应该比代码分析工具更有帮助(至少在开头)。

我建议您至少阅读一系列Effective C++ 和** Effective STL 书籍。见alsot The Definitive C++ Book Guide and List

答案 2 :(得分:5)

对于g ++,以及打开-Wall,打开-pedantic,并准备对它发现的问题数量感到惊讶!

答案 3 :(得分:3)

与Java,C#等相比,C ++的工具支持非常糟糕,因为它没有无上下文语法。实际上,C ++语法的某些部分是不可判定的。基本上,这意味着在语法层面理解C ++代码需要使用语义分析来实现几乎一个编译器前端。 C ++不能独立于语义分析而被解析为AST,并且IDE中的大多数代码分析工具等都在AST级别工作。这是您为了换取C ++的灵活性和向后兼容性而做出的权衡的一部分。

答案 4 :(得分:3)

打开所有编译器警告(至少在最初阶段)然后理解它们的意思,如何解决突出显示的问题以及哪些警告代表编译器编写者可能认为含糊不清的真正结构是一个良好的第一步。

如果你需要更重的东西,你可以试试PC-Lint,如果你在Windows上,这仍然是C ++最好的lint工具之一。请记住,您需要配置这些工具以反映您的编码风格,否则您将被淹没警告,并且无法看到树木。是的,这需要花钱,如果你没有按照“获得报酬”的水平做C ++,那可能有点矫枉过正,但我​​发现它非常宝贵。

答案 5 :(得分:3)

wikipedia有静态代码分析工具列表。

但是警告通常是好的,但启用所有警告和迂腐和墙壁的一个问题是你可能从包括你无法控制的标题获得的警告数量,这可能会产生很多噪音。我喜欢编译我自己的软件,但启用了所有警告。当我在linux中编程时,我通常会这样做:

将我需要包含的外部标题放在一个单独的文件中,并在include文件之前放在该文件的开头:

#pragma GCC system_header

然后从您的代码中包含此文件。这使您可以从自己的代码中查看所有警告,而不会被外部代码中的警告淹没。缺点是它是一个gcc特定的解决方案,我不知道任何独立于平台的解决方案。

答案 6 :(得分:2)

lint - 有很多版本,但是如果你google for lint你应该找到一个有效的版本。另一件事是打开你的编译器警告 - 如果你使用的是gcc / g ++,那么选项是-Wall。

您可能会发现CppChecker有助于Eclipse的插件支持gcc / PC lint。

答案 7 :(得分:2)

我认为你真正需要学习的是如何在IDE之外进行调试。在我看来,这是一项有价值的技能,因为您不再需要如此繁重的工具集来开发软件,它将适用于您已经知道并将学习的绝大多数语言。

但是,它很难习惯。您只需编写代码用于调试目的,例如在尚未调试的每一行之后写入检查,以确保结果符合预期,或将值打印到控制台或消息框中,以便您自己检查它们。它很乏味,但可以让你在IDE的内部或外部更容易地发现你的错误。

下载并尝试一些免费的调试工具,如GDB,它们可以帮助您探测内存等,而无需编写自己的代码。