2009-07-16 10 views
2

サードパーティ製のライブラリ(c、C++)、オープンソース(LGPLと言う)が得意な場合は、それを理解するための最良の方法は何ですか?アプリケーションに統合できますか?サードパーティのコードを読む/理解する

通常、ライブラリにはいくつかのサンプルプログラムがあり、gdbを使ってコードを調べていきます。他の提案/ベストプラクティス?例えば

は、私はちょうどsourceforge.netから1を選んだが、それはちょうど、幅広いエンジニアリング/プログラミングの質問です:それはそれを自分を文書化しようと試みることであることを理解するためのより良い方法の http://sourceforge.net/projects/aftp/

答えて

5

私は頻繁にこれで私を助けるためのツールのカップルを使用します。

  • GNU Global。相互参照データベースを生成し、ソースコードからハイパーリンクされたHTMLを生成することができます。関数呼び出しをクリックするとその定義が表示され、関数へのすべての参照のリストが表示されます。 CとおそらくC++でのみ動作します。
  • Doxygen。 Javadocスタイルのコメントからドキュメンテーションを生成します。文書化されていないメソッドのドキュメントを生成するように指示すると、素晴らしいサマリーが得られます。また、ハイパーリンクされたソースコードリスティングを生成することもできます(また、htagsによって提供されるリスティングにリンクすることもできます)。

これらの2つのツールは、Emacsでコードを読み込んだり、再帰的なgrepでいくつかの検索を行うだけで、私のソースリバースエンジニアリングの大部分をどのように処理するかです。

1

一つ。自分で文書化しようとすることによって、実際に掘り下げてテストし、テストし、テストし、各ステートメントが何時何をしているのかを知るように強制します。そうすれば、以前の開発者が何を考えていたのかを理解し始めることができます。

0

ヘッダーに記載されている情報をよくご確認ください。呼び出した関数は、そこで宣言されます。次に、関数の有効な引数と事前/事後条件を識別してください。これは、主なガイダンス(文書化されていなくても!)です。サンプルプログラムはあなたの次の賭けです。

0

コード補完/インテリセンスをお持ちの場合は、ライブラリを開き、 '。'または 'namespace ::'と出てくるものを見てください。私はいつも役に立つと思っています。あなたはオブジェクト/名前空間をナビゲートし、それらが持つ機能を見ることができます。これはもちろん、関数/オブジェクトの名前が比較的よくあるOOPライブラリを前提としています。

1

大きな質問です。これは徹底的に取り組まなければならないと思いますので、可能な限り徹底的に回答していきたいと思います。

私が継承した、または貢献している大きなプロジェクトに近づくときに私が行うことの1つは、ソース、UML図、およびさまざまな量のA.D.Dを緩和できるものを自動的に生成することです。新しいプロジェクトを習得するときに遭遇しました:)

私はすでにここで誰かがDoxygenを言いました、それは素晴らしいツールです!それを調べ、設定したツリー構造で開発しているアプリケーションのソースを自動的に生成する小さなbashスクリプトを記述する必要があります。

私が人々に言及していないことの1つはBOUMLです!それは素晴らしいと無料です!既存のソースから逆UML図を自動的に生成し、さまざまな言語をサポートします。私はこれを、コードを読み始める前に、アーキテクチャと設計の面で何が起きているのかを実際に把握する方法として使用します。

余裕がある場合は、%language-here%を理解してください。これは絶対に素晴らしいことであり、レガシーコードを継承するときに多くの点で助けになりました。

EDIT:

ACK(betterthangrep.com)を試してみて、それがソースツリーを検索するためにかなり便利なスクリプトです:)

0

本当にちょうどあなたの袖をロールアップ以外の銀の弾丸ありませんコードを掘り下げる

これは私たちがお金を稼ぐところです。

0

3つの事柄。

(1)使用可能なテストまたはサンプルアプリケーションを実行し、デバッグレベルを低く設定し、ログを参照してみます。 (2)ソースナビゲータツール/ cscope(WindowsとLinuxの両方で使用可能)を使用し、コードを参照してフローを理解してください。 (3)また、テスト/サンプルアプリケーションの実行中にgdbを使用してコードを実行することもできます。