2009-07-16 107 views
2

當你得到一個第三方庫(C,C++),開源(LGPL說),不具有良好的文檔,什麼是去理解它的最好方式能夠融入你的應用程序?閱讀理解/第三方代碼

庫通常具有一些示例性的方案和我最終用gdb遍歷代碼。任何其他建議/最佳做法?

舉一個例子,我只是拿起一個從sourceforge.net,但這只是一個廣泛的工程/編程問題: http://sourceforge.net/projects/aftp/

回答

5

我經常使用一些工具來幫助我:

  • GNU Global。它生成交叉引用數據庫,並可以從源代碼生成超鏈接的HTML。點擊函數調用將引導你進入他們的定義,你可以看到所有函數引用的列表。只適用於C和C++。
  • Doxygen。它從Javadoc風格的評論中生成文檔。如果你告訴它爲未記錄的方法生成文檔,它會給你很好的總結。它也可以產生超鏈接的源代碼列表(並且可以鏈接到由htags提供的列表)。

這兩個工具,只是在Emacs中讀取代碼並使用遞歸grep進行一些搜索,是我如何執行大部分源逆向工程。

1

其中一個更好的方法來理解它是試圖自行將其記錄下來。通過去嘗試自己記錄它,它會迫使你真正潛入並測試,測試和測試,並確保你知道每個語句在什麼時候都在做什麼。然後,你可以真正開始理解以前的開發人員可能一直在想什麼(或者沒有考慮過這個問題)。

0

請熟悉標題中提供的信息。你調用的函數將在那裏聲明。然後嘗試確定函數的有效參數和前/後置條件,因爲這些是您的主要指導(即使它們沒有記錄!)。示例程序是您的下一個賭注。

0

如果你有代碼完成/智能感知我喜歡開放的圖書館中去「」或'namespace ::',看看會發生什麼。我總是發現它很有用,您可以瀏覽對象/命名空間並查看它們具有的功能。這當然假設它的OOP庫具有相對較好的函數/對象的命名。

1

偉大的問題。我認爲這應該徹底解決,所以我會盡量讓我的答案儘可能徹底。

有一兩件事,我接近,我已經繼承或者大型項目或有助於自動生成它們的來源,UML圖的時候做的,任何可以緩解各種量A.D.D.的遇到學習一個新的項目:)

時,我相信有人在這裏已經提到Doxygen的,這是一個偉大的工具!你應該仔細研究它,並編寫一個小的bash腳本,它會自動爲你正在開發的應用程序生成源代碼,並以你設置的樹狀結構爲基礎。那我還沒有看到有人提起

一件事是BOUML!這太棒了,免費!它自動從現有源生成反向UML圖,並支持多種語言。在我開始閱讀代碼之前,我將它作爲一種方式來真實地捕捉關於架構和設計方面正在發生的事情的大圖。

如果您有足夠的資金,請查看%language-here%的瞭解情況。這絕對是非常棒的,並且在繼承遺留代碼時以多種方式幫助我。

編輯:

試用ACK(betterthangrep.com),它是用於搜索源代碼樹:)

0

真的有很方便的腳本是不是不只是捲起你的袖子其他銀彈並深入代碼。

這是我們賺錢的地方。

0

三件事; (1)嘗試運行可用的測試或示例應用程序,設置較低的調試級別並遍歷日誌。 (2)使用源代碼瀏覽器工具/ cscope(可在Windows和Linux上使用)並瀏覽代碼以瞭解流程。 (3)同時使用gdb在運行測試/示例應用程序時進入代碼。