C ++でのクラスの参照


7

私は大規模なコードベースで作業しており、それが退屈でクラスの関係を理解するのが難しいことがよくあります。C ++でOOPを操作するためのさまざまなツールについて説明している次のWikiを見つけましたが、古くなっているか機能していません。大規模なOOコードベースでの作業に使用できるEmacsツールは何ですか?

これが私が見つけたものです:

  • オブジェクト指向ブラウザ
    • 2002年以降更新されていません。消滅した
  • 借りる
    • 私も、私の目標は、WindowsまたはMac OS Xのだろう...パーサーのダウンロードリンクを見つけることができません、それはemacsのビンディレクトリにあります指摘しTU-行う@おかげで
  • Emacsコードブラウザ
    • Etagsのみをサポートしているようですが、グローバルタグやcscopeはサポートしていません

回答:


6

私はEbrowseのガイドを書いており、今週にリリースします。Ebrowseは、C ++ソースファイルを処理して、後でEmacsによって処理されてクラスツリー表現を生成するクラス階層を含むデータベースを生成するために使用される高速パーサーです。GNU Globalに似ていますが、Emacsに組み込まれており、クラスツリーを生成するため、大きなソースツリーでの処理には時間がかかります。

Ebrowseを使用するには:

find . -name '*.cpp' -or -name '*.h' | ebrowse

必要に応じて、さらに拡張子を追加します。プロジェクトに数百のファイルしかない場合、= Ebrowse =は非常にうまく機能します。コマンドを実行すると、という名前のファイルBROWSEが生成されます。これは、クラス階層を含むデータベースです。このファイルを開くだけで、Emacsは自動的にファイルを認識して処理します。データベースの処理が完了すると、Emacsはデータベース内のすべてのクラスのインデックスをツリー形式で表示します。クラスがクラスから派生している場合、それは親クラス内にネストされています。このバッファはと呼ばれますTree buffer。Emacsは以下と相互作用する3つの方法を提供しますEbrowse

  • Tree buffer:ツリーを表示するバッファー。
  • Memberbuffer:各クラスのメンバーを表示するバッファー。クラスの宣言と定義を切り替えて、対応するソースファイル内のそれぞれの場所にジャンプできます。
  • Sourcebuffer:コードバッファー。Ebrowse 読み取りと表示(読み取り専用で開く)の宣言と定義のようなデータベースを操作できます。タグを含むクラスの= Member =バッファをポイントで開きます...

大規模なプロジェクト(つまり、10000を超えるcppファイル)があるが、すべてのクラスが.hファイル内にある場合は、追加しないでください。追加しないと、ファイルの.cpp生成に非常に時間がかかりBROWSEます。ただし、定義に切り替える機能は失われます。しかし、これはctagsまたはを使用して行うことができますGNU Global。最も重要なことは、クラス階層をで表示することですTree buffer。これがEbrowseの利点です。

WIPガイドはこちらです。

更新:または、doxygenを使用しすべての種類のグラフ(呼び出し元/呼び出し先グラフ、依存関係グラフ、クラス階層グラフ...)を生成できますが、ipxeのような小さなソースツリーであっても、すべてを生成するには長い時間がかかります。これはdoxygen遅くはありませんが、実際には非常に最適化されていますが、コードベース全体の依存関係を計算することは簡単な作業ではありません。

おまけ:Cで作業していて、コールグラフを見たい場合は、GNU Cflowを使用してください。私のReddit回答を参照しください。


これはばかげて聞こえるかもしれませんが、「ebrowse」実行可能ファイルはどこにありますか?WindowsまたはMac OS Xでは利用できませんか?
2014年

@cheezy Emacsとともにインストールされます。したがって、Emacsをインストールする場合binは、Emacsを含むディレクトリの下にある必要があります。したがって、emacsコマンドラインで実行できる場合は、を実行できるはずebrowseです。
Tu Do

@cheezy btw、あなたのために完成はうまくいきましたか?
Tu Do

純粋にOrg構文の+1。ああ、私もその答えがいいと思います:)
Sean Allred 14年

@SeanAllred wootはそれに気づかなかった。修正:)
Tu Do

2

あなたはインタラクティブに使用するための素敵なヘルムインターフェイスを持つことができますcscope

http://wikemacs.org/wiki/Python#Indexing_sources:_ctags.2C_cscope.2C_pycscope

https://github.com/sergey-pashaev/helm-cscope

次に、M-x helm-cscope-find-global-definition利用可能なような関数があります。ナビゲーションが速くなります。


しかし、彼が望んでいたのはナビゲーションではなくクラス階層の概要であり、これはEbrowseに固有のものです。彼のプロジェクトで実行可能な唯一のナビゲーションツールは、etags 「タグ補完テーブルの作成」フリーズ/ブロックです—無効にする方法
Tu Do

mmh、IMO(s)彼は(タイトルにかかわらず)クラス階層の概要を探すだけでなく、「大規模なOOコードベースでの作業に使用できるツール」も探します。 cscopeそのために役立ちます(より優れていますetags)。彼の質問の最後の言葉です:)
Ehvince

さて、彼の以前のスレッドでetagsは、GNU Globalなどの他のソリューションを試しているにも関わらず、プロジェクトでのみ使用可能であると既に述べています(これは間違いなくより優れていますctags)。しかし、クラス階層では、EborwseまたはDoxygenのような外部ツールが実行可能なオプションです。そして最初の文は「私は大規模なコードベースで作業していて、それが退屈でクラスの関係を理解するのが難しいことに気づく」:)
Tu Do

ああ、あなたが別のスレッドを参照しているように見えます(私は知らなかった)。cscope「このクラスを呼び出す人を見つける」ことができるため、クラスの関係を支援できます。
わかり
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.