C – 我使用什么选项来生成列表文件?

我是C编程语言和gcc的新手。

我试图破译一个相当复杂的C程序。 我想阅读一个有用的列表文件而不是源文件。

我正在寻找由gcc编译器创建的列表文件,其中包含:

  1. 所有包含的源代码
  2. xref =交叉引用列表
  3. 引用变量声明的位置。 例如,如果该行包含i++; ,然后一张纸条说i被宣布了。

我做了一个搜索,但是gcc有很多选择,我迷路了。

如果有更好的地方提出我的问题,请告诉我。

我理解你的困境。 多年前,我试图完成你正在做的事情,但最终我放弃了。 虽然一个字面上可以做到这一点,但结果会将相关代码淹没在与手头问题无关的大量代码中,以至于无用。

我担心你将不得不学习如何以C语言阅读C代码。 如果代码很复杂,并且你是初学者,那么 – 目前 – 你可能已经过头了。

如果你想尝试它,那么看看源的几个* .h“标题”文件的名称。 选择三个或四个头文件,您可能会解决问题的核心部分。 首先阅读这些文件。 从那里扩大阅读范围。 这不容易,直到你摆脱它。

祝好运。

一种不同的方法。 如果你使用ie Vim然后在代码上运行cscope。

例如,我将Ctrl + \作为cscope触发器。 如果我在一个function:

 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堆栈中, Ctrl t会将其返回到我输入最后一个跳转命令的位置。


另外添加ie Taglist ,你会得到一个窗口侧面的列表,其中包含所有定义,变量,函数等,并在列表中排序。


另一个选择是使用ie -ggdb编译代码并在像Code :: Blocks这样的IDE中运行它,使用DDD等 - 并在代码运行时通过代码执行。 可以很有教育意义。


你没有。 您使用单独执行列表的程序。 编译器必须知道打印也很愚蠢。

我推荐a2ps 。 要进行交叉引用,请查找cxref 。

要回答问题#1,可以通过使用gcc -E查看预处理器输出来查看所有包含的源代码。 但是,该代码可能更难以理解,因此它可能并不是您真正想要的,尽管我发现它在某些情况下对我需要做的事情很有用。

嗯,我老了,OP需要的是预处理器输出,是的,它可以比IDE更具启发性。 预处理器处理所有#语句,如#include和#ifdef。 因此它向您展示了最终成为编译器输入的内容。 g ++手册页解释了4个步骤:预处理,编译,汇编和链接

然后它继续解释可以在任何时候停止序列。 然后在“预处理器选项”下,解释了控制它的方法。 正如另一篇文章所述,-E会做到这一点,但这只是答案的一部分。 为了更好地控制,请使用-f系列选项,例如-fdirectives-only。 那可能是OP想要的是:

  gcc -E -fdirectives-only -o MySrc.lst MySrc.cpp 

对于那些使用C ++的人,我建议直接使用g ++:

  g++ -E -fdirectives-only -o MySrc.lst MySrc.cpp 

然后在MySrc.lst中显示所需的列表