2009-07-24 5 views
3

C++の上に構築された独自のAPIがあります。したがって、C++のすべての機能を使用し、独自のAPIを備えています。 C++ APIとまったく同じように機能するいくつかのAPIがあります(mallocのようにStrallocがあります)。これらのAPIはパフォーマンス上の理由から提供されています。独自のAPI用の静的ソースコード解析ツールを開発していますか?

C++で使用できるスタティックコードアナライザは多数ありますが、いずれも使用できません。独自のAPIを使用してコード上で実行できるスタティックコードアナライザが必要です。

コードアナライザの開発を開始するにはどうすればよいですか。それは、C++で利用可能なもののように非常に機能指向である必要はないかもしれません。私は、未使用の変数、バッファオーバーフロー、メモリリークの報告などの基本的なことから始めたいと思います。

ご指摘いただければ幸いです。

[更新]私が探していた以下の質問が見つかりましたが、違いはJavaの代わりに専有APIの問題です。これまでのところ私は良い答えがいくつかありましたが、私は本当にこの種の開発を経験した人からもっと知りたいと思っています。

Introduction to Static Analysis

答えて

2

私は混乱している:

が、これはCの上に言語の実装++やC++の上のAPIのセットだけですか?

後者の場合、通常のC++プロファイラはメモリリークやオーバーフローなどの情報を取得します。

+1

しかし、確かにそのようなプロファイラは、boost :: bind、シグナル、および非必須のパラダイムをC++に追加するようなものと混同されます。 – EFraim

+0

私が言及したように、C++ APIの代わりに使用されるAPIがあります。たとえば、free()を使用する代わりに、free()とまったく同じですがパフォーマンス上の理由で使用されるStrfree()APIが使用されます。したがって、通常のC++アナライザーはこれを認識できません。 – user32262

1

これを最初から書き込もうとしないでください。 C++は解析することさえ難しいことが知られていますが、私はあなたがこのルートをはるかに上回るとは思っていません。

ライブラリコールを解析するための独自のプラグインを作成できるように、拡張可能なC++スタティックアナライザを使用する必要があります。私の頭の上から、私はお勧めします:

  • のGCC C++フロントエンド(gccは今のプラグインを持っている)
  • EDG C++パーサ
  • Roseを(EDGを使用しています)
  • LLVM(多分clangを使用していますが、primetimeの準備ができていない可能性があります)
  • Microsoftのフェニックスフレームワーク(私はこれを行うことができます、私はチェックしていないと仮定します)。

最高の答えは、おそらくclangまたはroseです。

2

CoverityとKlocworkのようなソリューションには、独自のルールを書くことができる拡張可能なルールセットがあります。標準のメモリチェックでカスタムメモリアロケータを理解できるようにツールを設定することもできます。しかし、いくつかの制限が適用されます。

これらのツールを使用すると、同じワークフローを借りることができるので便利です。繰り返しますが、それはあなたがコードしているものと、正確に何をしようとしているものかによって異なります。

+0

はい、ホイールを再構成するよりも既存のツールを使用する方が良いでしょう。 Coverityのドキュメントは公開されていませんが、Klocworkのドキュメントは公開されています。 mallocのように動作する関数のナレッジベースエントリを作成する例については、を参照してください。 (ソースコードが最終的にmallocを呼び出す場合でも、これを行う必要はないかもしれませんが、Klocworkはそれ自体のためにそれを理解するかもしれません)。 –

1

構文解析C++は実際には非常に難しいです。 C++の拡張された方言がある場合は、あなたの方言に「簡単に」曲がる完全なC++パーサーが必要であり、分析ツールを構築する手段があります。

DMS Software Reengineering Toolkitは、一般的な解析、ツリー構築、シンボルテーブルの作成、およびフロー解析機能を提供する、完全にカスタマイズ可能な汎用分析および変換インフラストラクチャです。これは、完全にカスタムのアナライザーを構築するために使用されます。

これは、C++のいくつかの標準方言を扱い、他の拡張を扱うようにカスタマイズすることができるC++ Front Endです。 C++フロントエンドは完全なプリプロセッサ機能を持ち、ASTを解析してビルドし、完全なC++の名前と型分析を行います。

関連する問題