2009-07-24 283 views
3

有一個建立在C++之上的專有API。因此它使用C++的所有功能,然後擁有自己的API。有一些API的功能與C++ API完全相同(比如對於具有Stralloc的malloc),這些API是出於性能原因而提供的。開發專有API的靜態源代碼分析工具?

儘管C++有很多靜態代碼分析器可用,但我們不能使用它們中的任何一種。需要有一個靜態代碼分析器,可以使用專有API在代碼上運行。

我想知道我該如何開始開發代碼分析器。它可能不需要像面向C++的面向特徵的面向對象。我想從基本的東西開始,比如報告未使用的變量,緩衝區溢出和內存泄漏。

任何指導將不勝感激。

[UPDATE]我發現了以下問題,這是我正在尋找的,唯一的區別是,而不是Java我關心的是專有API。到目前爲止,我已經得到了幾個很好的答案,但我真的很想從那些經歷過這種發展的人那裏瞭解更多。

Introduction to Static Analysis

回答

2

我很困惑:

這是對的C++頂部或只是對C++的頂部API集的語言實現?

如果是後者,任何正常的C++分析器都會捕獲內存泄漏和溢出等問題。

+1

但是這樣的剖析器肯定會與諸如boost :: bind,signals和其他爲C++增加非強制範例的構造混淆。 – EFraim 2009-07-24 22:00:19

+0

就像我剛纔提到的,有些API是用來代替C++ API的。例如,不使用free(),而是使用Strfree()API,它與free()完全相同,但出於性能方面的原因使用。所以任何普通的C++分析器都無法識別這一點。 – user32262 2009-07-24 22:08:39

1

不要試圖從頭開始寫這個。 C++是非常難以解析的,我不認爲你會在這條路上走得太遠。

您應該使用可擴展的C++靜態分析器,以便您可以編寫自己的插件來分析庫調用。關閉我的頭頂,我建議:

  • gcc的C++前端(GCC現在有插件)
  • 的EDG C++解析器
  • Rose(使用EDG)
  • LLVM(也許使用鐺,但它可能沒有準備好黃金時間)
  • 微軟的鳳凰框架(我認爲它可以做到這一點,我沒有檢查)。

最好的答案很可能是叮噹或玫瑰。

2

像Coverity和Klocwork這樣的解決方案有一個可擴展的規則集,您可以在其中編寫自己的規則。您還可以配置該工具,以便其標準內存檢查瞭解自定義內存分配程序。但有些限制適用。

使用這些工具很有用,因爲您可以借用相同的工作流程。同樣,這取決於你的代碼是什麼以及你想要做什麼。

1

解析C++在實踐中非常困難。如果你有一個C++擴展方言,你需要一個完全的C++解析器,它「易於」傾向於你的方言,並且具有構建分析工具的手段。

DMS Software Reengineering Toolkit是完全可自定義的通用分析和轉換基礎結構,提供常規解析,樹形構建,符號表構造和流分析功能。它用於構建完全自定義分析器。

它有一個C++ Front End,它可以處理C++的幾種標準方言,並且可以自定義來處理其他擴展。 C++前端具有完整的預處理器功能,解析和構建AST,並執行完整的C++名稱和類型分析。