簡體   English   中英

開源C ++掃描庫

[英]Open-source C++ scanning library

理由 :在我的日常C ++代碼開發中,我經常需要回答一些基本問題,例如誰在一個經常變化的非常大的C ++代碼庫中調用了什么。 但是,我還需要有一些自動方法來准確識別代碼在特定代碼區域內所做的工作。 諸如Cscope之類的“grep”工具很有用(我已經大量使用它們),但不是C ++ - 語言感知:它們沒有任何方法來識別給定類型的詞匯環境的類型和種類或者以一種有利於自動化的方式運行(即使所述自動化僅限於“只讀”操作,例如代碼瀏覽和導航,但我要求的不僅僅是下面的內容)。

問題 :是否已存在基於C / C ++的開源庫(本機,非托管,非Microsoft或Linux特定),可以靜態掃描或分析大型C ++代碼樹,並且可以生成可回答的結果集詳細問題如:

  • 某些提供的函數調用了哪些函數?
  • 哪些功能使用這種提供的類型?
  • 如果涉及C ++類或類模板,請同樣考慮上述問題。

結果集應該提供某種“句柄”。 我應該能夠將該句柄反饋給庫以執行以下類型的內省:

  • 進行引用的文件中的字節偏移量是多少?
  • 對該引用的抽象語法樹(AST)的引用是什么,以便我可以檢查周圍的代碼構造? 並且每個AST實體還具有與之關聯的文件路徑,字節偏移和類型信息數據,因此我可以遞歸地向上走調用者或引用者的圖形以執行有用的操作。

答案應符合以下要求:

  • API :公開的API必須是以下之一:
    • C或C ++,可能是“C句柄”或C ++ - 基於類的實例(如果是,必須是通用的C o C ++代碼,而不是Microsoft或Linux特定的代碼構造,除非它是滿足給定的細節平台),或
    • 命令行標准輸入和標准輸出。
  • C ++意識 :不僅限於C代碼,而是以細微的細節理解C ++語言結構,包括對類間繼承關系和C ++模板的了解。
  • 快速 :掃描大型代碼庫比從頭開始編譯整個代碼庫要快得多。 這可能需要放寬,但只有在下面完全滿足增量結果檢索小型代碼更改要求的彈性時
  • 提供結果計數 :我應該能夠問“你會為一些請求提供多少結果(並且不會向我發送所有結果)?” 響應的次數少於3秒,而不必檢索任何給定問題的所有結果。 如果得到答案需要太長時間,那么就浪費了開發時間。 這與下一個要求相結合。
  • 增量結果檢索 :我應該能夠然后問“給我這個請求的下一個N個結果”,然后是結果集的句柄,這樣我就可以反復提出問題,從而逐步提取結果。 這意味着在查看所有結果的某個子集之前,我不必等待整個結果集。 如果我看到足夠的結果,我可以安全地取消操作。 原因:我需要回答這個問題:“更改某些特定功能簽名會對構建或開發產生什么影響?”
  • 適應小代碼更改 :如果我更改標頭或源文件,我不必等待重新掃描整個代碼庫,而只重新掃描該標頭或源文件。 重新掃描應該很快。 例如,不要執行cscope要求您執行的操作,即重新掃描整個代碼庫以進行小的更改。 可以理解,如果更改標題,則掃描可能需要更長時間,因為必須重新掃描包含該標題的其他文件。
  • IDE不可知:文本編輯器是不可知的(不要讓我使用特定的文本編輯器;我已經做出了我的選擇,謝謝!)
  • 平台不可知:與平台無關(不要讓我只在Linux上或僅在Windows上使用它,因為我必須在我的日常工作中使用這兩個平台,但是我需要這個工具對我們兩個都有用兩個平台上的代碼沙箱)。
  • 非二進制 :除了下載和編譯庫及其所有依賴項的時間之外,我不應該花費任何其他成本。
  • 不是試用品
  • 積極支持 :向郵件列表或相關論壇發送幫助請求可能會在不到2天的時間內得到響應。
  • 網絡不可知 :庫構建的數據庫應該能夠直接在32位和64位系統的網絡上使用,Linux和Windows可以同時互換,並且不會將硬編碼路徑嵌入文件系統,否則“ root“數據庫到特定網絡。
  • 構建環境不可知 :不需要對我的構建環境有深入的了解,除了可能需要了解編譯器提供的CPP宏定義(例如-Dmacro = value)之外。

我會說CLang指數非常貼合。 但是我不認為它將數據存儲在數據庫中。

無論如何,CLang框架提供了構建滿足您需求的工具所需的實際內容,只是因為它的C,C ++和Objective-C解析/索引能力。 因為它是作為一組可重復使用的庫提供的......它是為開發而精心制作的!

我不得不承認我沒有使用過,因為我使用了很多特定於Microsoft的代碼,這些代碼使用了我不希望他們理解的Microsoft編譯器擴展,但我知道的兩個開源分析器是Mozilla豬肉Clang分析儀

如果您正在尋找代碼分析的結果(指標,圖表......),為什么不使用工具(而不是API)來做到這一點? 如果可以,我建議你看看理解

它不是免費的(有試用版),但我發現它非常有用。

也許Doxygen with GraphViz可能是你的一些約束的答案,但不是全部,例如Doxygen的分析不是增量的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM