305

Java には、 FindBugsCheckstylePMDなどの非常に優れたオープン ソースの静的解析ツールがいくつかあります。これらのツールは使いやすく、非常に便利で、複数のオペレーティング システムで動作し、無料です。

市販の C++ 静的解析製品が利用可能です。そのような製品を持っていることは素晴らしいことですが、学生にとってはコストがかかりすぎて、通常、試用版を入手するのはかなり困難です.

別の方法は、複数のプラットフォーム (Windows および Unix) で実行できるオープン ソースの C++ 静的解析ツールを見つけることです。オープン ソース ツールを使用することで、特定のニーズに合わせて変更できます。ツールを見つけるのは簡単なことではありません。

以下は、他の人によって発見または提案された C++ 静的解析ツールの短いリストです。

誰もが知っていて、推奨できるポータブルなオープンソースの C++ 静的解析ツールは何ですか?

いくつかの関連リンク。

4

14 に答える 14

74

CppCheckはオープンソースでクロスプラットフォームです。

Mac OSX:

brew install cppcheck
于 2009-05-08T23:27:25.420 に答える
54

GNU コンパイラに関しては、gcc には既に組み込みオプションがあり、-Wall の警告に追加の警告を有効にします。オプションは-Weffc++で、 Scott Meyersの著書「Effective and More Effective C++ 」で公開されているいくつかのガイドラインの違反に関するものです。

特に、このオプションは次の項目を検出します。

  • 動的に割り当てられたメモリを持つクラスのコピー コンストラクターと代入演算子を定義します。
  • コンストラクターでの割り当てよりも初期化を優先します。
  • 基本クラスでデストラクタを仮想化します。
  • "operator=" が *this への参照を返すようにします。
  • オブジェクトを返さなければならないときに参照を返そうとしないでください。
  • インクリメント演算子とデクリメント演算子の前置形式と後置形式を区別します。
  • 「&&」、「||」、または「,」をオーバーロードしないでください。
于 2008-09-27T20:24:38.280 に答える
29

今のところ開発中ですが、clangは C 分析を行い、いずれ C++ を処理することを目標としています。これはLLVMプロジェクトの一部です。

更新: ランディング ページには「アナライザーは進行中の継続的な作業です」と記載されていますが、現在はC と C++ の両方の静的アナライザーとして文書化されています。

質問:静的解析のために GCC/Clang を実行するにはどうすればよいですか? (警告のみ)

コンパイラ オプション: -fsyntax-only

于 2008-09-29T02:06:17.857 に答える
21

Oink は、Elsa C++ フロントエンドの上に構築されたツールです。Mozilla の Pork は Elsa/Oink のフォークです。

参照: http://danielwilkerson.com/oink/index.html

于 2008-11-12T22:04:12.717 に答える
17

他の誰かが-Weffc++について言及しましたが、それは実際には私がデフォルトでオンにしない唯一のGCC警告の1つです。ただし、私がオンにする一連の警告は、私のキットで最も重要な静的分析ツールです。推奨される警告の完全なリストを確認できます。

要約すれば:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror-Wno-unused

これらのいくつかはgccの新しいバージョンを必要とするので、4.5か何かで立ち往生している場合は、リストからそれらを削除する必要があるかもしれないことに注意してください。

于 2012-07-01T16:53:28.583 に答える
14

John Carmack は、「静的コード分析」に関するこの興味深いブログ投稿でもPVS-Studioについて言及しています。

于 2012-01-22T15:23:00.130 に答える
7

オープン ソースという言葉が本当に「無料」を意味するのであれば、Microsoft のプレファスト分析は優れたものです。もちろんWindowsのみ。Visual Studio とコンパイラに完全に統合されています。例えば:

cl /analyze Sample.cpp
于 2008-09-27T07:59:33.580 に答える
6

Mozilla の静的解析作業は一見の価値があります。

于 2008-09-27T08:24:30.227 に答える
4

Splintは C の請求書を満たしているようです。

オープン ソースを指定しなかった場合、Gimpel SoftwarePCLintはおそらく、C++ での静的コード チェックに使用できる最高のツールの 1 つです。しかし、もちろんオープンソースではありません。

マックOSX:

brew install splint
于 2008-09-26T19:52:56.727 に答える
3

Microsoft のPREFastは、Windows Driver Kit にも含まれています。バージョン 7.0 は、ここからダウンロードできます。

Microsoft ドキュメントには、ドライバー コードに対してのみ実行する必要があると記載されていますが、この (古い)ブログ投稿では、実行する手順が説明されています。おそらく、通常のビルドプロセスに統合できますか?

于 2010-01-19T20:18:32.077 に答える
2

私たちは、metriculator と呼ばれる Eclipse CDT プラグインに取り組んできました。まだ開発中ですが、いくつかの主要な指標 (LSLOC、McCabe、EfferentCoupling など) は既に実装されています。

ビデオのデモンストレーションやドキュメントなどの詳細については、http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentationを参照してください。

最新のナイトリー ビルドは、 http ://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/ の更新サイトからインストールできます。

詳細説明

Metriculator は C++ ソース コードを静的に分析し、ソフトウェア メトリックを生成します。メトリクスは Codan チェッカーとして実装されます。分析結果は、別のビューで調べることができます。各メトリックには、構成可能なプロパティがあります (「関数ごとのコードの最大行数」のしきい値など)。これらのしきい値を超えると、問題が報告され、ソース コード エディターにマーカーが作成されます。

メートル法を使用すると、次のことができます。

  • C++ ファイル / フォルダー / プロジェクトを分析する
  • 指標のしきい値を定義し、Codans 設定ページを使用して指標を有効/無効にします
  • ソース コード エディターに問題マーカーを表示する
  • メトリクスの結果を調べる
  • メトリクス結果をタグ クラウドとしてエクスポート (更新サイトからオプション機能として利用可能)

現在、metriculator には次のメトリックが付属しています。

  • McCabe (循環的複雑性)
  • タイプごとのエフェレントカップリング
  • コードの論理ソース行
  • タイプごとのメンバー数
  • 関数ごとのパラメータ数
于 2012-04-19T08:18:54.650 に答える
1

MELT ( GCCを拡張するために設計されたドメイン固有言語)でGCCの拡張機能をコーディングしたり、C(はるかに難しい)でGCCプラグインをコーディングしてカスタム分析を行うこともできます。

于 2011-11-09T21:33:13.157 に答える
1

xemacs との素晴らしい統合を備えた oo-browser を試してください。

于 2009-05-09T16:55:02.157 に答える
0

Doxygen は、いくつかの制御フロー分析を行い、グラフを生成します。それらはあなたが探しているものではないかもしれませんが、見るのに役立つと思います.

于 2008-11-12T22:24:25.640 に答える