6

C プログラミング言語と gcc は初めてです。

かなり複雑な C プログラムを解読しようとしています。ソース ファイルの代わりに役立つリスティング ファイルを読みたいと思います。

以下を含む gcc コンパイラーによって作成されたリスト・ファイルを探しています。

  1. すべてのインクルードのソース コード
  2. xref = 相互参照リスト
  3. 変数が宣言されている場所への参照。たとえば、行に が含まれている場合、i++;were というメモiが宣言されます。

これで検索したのですが、gccは選択肢が多すぎて迷いました。

私の質問をするためのより良い場所があれば、私に知らせてください。

4

5 に答える 5

2

私はあなたのジレンマを理解しています。何年も前に、私はあなたがしていることを正確にやろうとしましたが、結局あきらめました. 文字通りそれを行うこともできますが、その結果、関連するコードが目前の問題に関係のないコードに溺れてしまい、役に立たなくなります。

C コードを C 流に読む方法を学ばなければならないのではないかと心配しています。コードが複雑で、あなたが初心者である場合は、今のところ、頭がいっぱいになっている可能性があります。

とにかく試してみたい場合は、ソースのいくつかの *.h "ヘッダー" ファイルの名前を見てください。問題の中心部分に対処する可能性が高いと思われる 3 つまたは 4 つのヘッダー ファイルを選択します。これらのファイルを最初に読んでください。そこから読みを広げてください。あなたがそれのスイングを得るまで、これは簡単ではありません.

幸運を。

于 2012-04-27T02:34:27.687 に答える
2

別のアプローチ。Vim などを使用している場合は、コードに対して cscope を実行します。

たとえば、cscope トリガーとしてCtrl+があります。\私が関数にいる場合:

01 #define SOME_BLAH 33
02 
03 void foo() {
04     printf("%d\n", SOME_BLAH); /* <- cursor on SOME_BLAH; 
05                                   trigger + G jumps to line 1 */
06 }
07 
08 void bar() {
09     foo(); /* <- Cursor on foo I hit trigger, G and I jump to line 3 */
10 }

同様に、このようにファイル間、インクルード、特定の関数を呼び出す関数のリスト、関数が呼び出している関数のリスト、ファイルを含むファイルのリスト、変数が定義されている場所へのジャンプなどをジャンプできます。すべて数回のキーストロークで実行できます。

すべてのジャンプは LIFO スタックに追加されCtrlt、最後のジャンプ先コマンドを入力した場所に戻ります。


さらに ie を追加するTaglistと、ウィンドウの横にリストが表示され、すべての定義、変数、関数などがリストに並べられます。


もう 1 つのオプションは、ie でコードをコンパイルし、-ggdbCode::Blocks のような IDE で実行し、DDD などを使用して、プロセスとして実行するときにコードをステップ実行することです。かなり教育的です。


于 2012-04-27T03:23:09.930 に答える
1

あなたはそうしない。リストを個別に行うプログラムを使用します。コンパイラが印刷についても知らなければならないのはばかげています。

a2psをお勧めします。相互参照については、 cxrefを探してください。

于 2012-04-27T02:18:54.750 に答える
1

質問 #1 に答えるには、を使用してプリプロセッサの出力を見ることで、すべてのインクルードのソース コードを確認できますgcc -E。ただし、そのコードはおそらく理解するのがより難しいため、実際に探しているものではない可能性がありますが、必要な場合に役立つことがわかりました。

于 2012-04-27T04:49:45.437 に答える