3

私の最後の仕事 (従来の FORTRAN 77 コード) では、どのサブルーチンが他のサブルーチンを呼び出したか、どのファイルでサブルーチンが定義されたか、どの共通ブロックがどの変数を保持しているか、どのサブルーチンがどの共通ブロックを含んでいたかなどをリストした相互参照のファイルがありました。次に、相互参照ファイルを grep し、プログラムの設計に関する情報を提供するシェル スクリプトによって使用されます。

私は今、新しい会社 (C++ コード) にいますが、その機能の一部を置き換える ctags を見つけました。私が最も見逃しているのは、「who.calls」と呼ばれるコマンドです。これは、特定のサブルーチンを呼び出すサブルーチン (つまり、関数またはメソッドを意味します。オブジェクト指向に慣れる必要があります) をリストします。たとえば、サブルーチンがサブルーチンfooを呼び出す場合bar:

>who.calls bar
foo

私の古い会社のプログラミング環境を再設計せずにこれを行う方法について何か提案はありますか? コマンドラインで使用できるスーパー正規表現またはその他の方法を探していますが、まったく異なるアプローチを使用して同じ情報を提供する他の方法を受け入れています。基本的に、デバッガーを実行せずにデバッグ関数スタックを検出したいと考えています。

4

5 に答える 5

5

doxygenの使用を検討することをお勧めします。コール ツリー全体とクラス構造を表示する Web ページを生成できるだけでなく、適切にフォーマットされたコメントを引き出して、Java の Javadoc と同じようにクラスとメソッドをドキュメント化することもできます。

もう 1 つの可能性は、IDE の使用を開始することです。vi (そして gvim) と ctags を 25 年間使用した後、最近 21 世紀に入り、Eclipse を使い始めました (私は Java を使用していますが、Eclipse 用の C++ プラグインを見たことがあります)。タグが実行できるすべてのことを実行できるだけでなく、現在のメソッドのすべての呼び出し元に移動することもできます。その上、非常に優れた対話型デバッガーが組み込まれています。

于 2009-02-12T18:47:40.703 に答える
4

コマンドラインで使用するには、cscopeを試してください。この質問などに答えることができるはずです:

  • 以下のコードを検索できます。
    • シンボルへのすべての参照
    • グローバル定義
    • 関数によって呼び出される関数
    • 関数 関数を呼び出す 関数
    • テキスト文字列
    • 正規表現パターン
    • ファイル
    • ファイルを含むファイル

C++ 用には書かれていませんが、C++ コードベースの検索を処理できる可能性があります (いくつかの注意事項があります)。

Web ベースのインターフェイスを探している場合は、サーバー上で実行され、リビジョン管理システムにインデックスを付ける OpenGrokを検討してください。特にお探しの検索はありませんが、記号検索で近似できます。

于 2009-02-12T19:13:51.107 に答える
2

SlickEdit は、ライブラリを含むプロジェクト内のすべてのシンボルにタグを付けて、「リファレンスを表示」に表示することができます。プラス 1 が定義である場合は、who.calls プラス 1 になります。ソースベースです。

于 2009-02-12T18:53:43.730 に答える
1

GNU Globalは、Unix ベースのシステムで私の代わりに仕事をしてくれます。

于 2009-02-12T19:23:12.600 に答える
0

言語に依存したソース コード検索エンジンは、SD Source Code Search Engineにあります。同時に多くの言語を処理できます。検索は、特定の言語のパターン、または言語全体のパターン (「TAX を含む識別子の検索」など) に対して実行できます。言語トークンに敏感になることで、誤検知の数が減り、ユーザーの時間を節約できます。C、C++、C#、COBOL、Java、ECMAScript、Java、XML、Verilog、VHDL、およびその他の多くの言語 (特に FORTRAN を含む) を理解します。

このツールを使用すると、誰が Fortran で X を呼び出しているかを簡単に見つけることができます。すべての識別子「X」を検索するだけです。タイプする実際のクエリは次のとおりです。I=X (「X という名前の任意の識別子」)。これにより、ソース コード ベース全体ですべての参照が検索されます。

于 2009-08-22T20:41:33.187 に答える