2012-01-10 50 views
1

我正在研究一个非常大的项目,我想用gdb进行调试。不幸的是,使用-g标志进行编译需要两天半的时间,并且输出的库大于60Go(项目需要约1Go而没有-g)。获取没有-g标志的gdb可读符号?

有没有更简单的方法来获得符号表(即能够回溯),如果是的话,如何? 我见过gdb提供三个级别的调试(-g 级别,如描述的here),它会帮助吗? string

在此先感谢。

+0

你能详细说一下你的意思吗? – NPE 2012-01-10 16:27:13

+0

@aix:有人告诉我可以使用'string'命令来解析我的对象。 @RicardoCárdenes:谢谢!我会尝试,如果我下面的尝试不起作用。 – 2012-01-10 17:00:43

+0

我发现这个开关'-feliminate-unused-debug-symbols'似乎把我的一个lib从800Mo缩小到35Mo(原来的8Mo)。我会在整个项目中让它一夜之间工作,并会让你知道结果。 – 2012-01-10 17:00:01

回答

6

对于只有函数名称的回溯,根本不需要-g

对于带有文件和行信息的回溯,使用最新的GCC版本,请尝试-gmlt选项(最小行表)。请注意,GDB中不会有局部变量信息。

如果你想要局部变量,你可能会想要使用-gdwarf-4

您指出的文档是gcc-2.95。这是一个古代版本。如果你还在使用它,你第一任务应该是如果您有关于要调试compile them with -g option源文件的想法切换到(当前)gcc-4.6.2

+0

我用'-ggdb'加上'-feeliminate-unused-debug-symbols',它适用于我。我会尝试'-gmlt',它可以工作并使用更少的磁盘空间。 – 2012-01-18 09:24:59

1

。请确保你的link with -g选项。现在你有一个部分调试图像。

+0

不幸的是,我想能够调试整个应用程序。 – 2012-01-11 13:13:35