【发布时间】:2014-08-19 14:10:37
【问题描述】:
我正在使用 Red Hat 4.4.7-3 和 gcc 4.8.3
我在两个文件(test.c 和 sum.c)中有代码,我用 gcc 分别编译了它们(带有调试信息)。在最后一个阶段,当我通过合并两个文件来制作最终输出时,调试信息会丢失。
test.c:
int main()
{
int a=5,b=7;
int c=testsum(a,b);
printf("%d + %d=%d\n",a,b,c);
return 0;
}
sum.c:
int testsum(int a, int b)
{
return a+b;
}
我做了以下事情:
gcc -c -g test.c -o test.o
gcc -c -g sum.c -o sum.o
gcc -g test.o sum.o -o output
当我执行 gdb sum.o 时,它会显示行号信息
(gdb) l testsum
1 int testsum(int a, int b)
2 {
3 return a+b;
4 }
但是使用 gdb 输出我没有得到行号信息。
(gdb) l testsum
No line number known for testsum.
(gdb)
我在我的个人笔记本电脑(gcc-4.8.real (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1)上重复了同样的事情,在这里它工作得很好。但是对于某些项目,我需要在 redhat 机器上的最终输出中提供调试信息。
任何有关在最终可执行文件中获取行号信息的建议/cmets 将不胜感激。
【问题讨论】:
-
顺便说一句:刚刚在最新的 CentOS 6.5 32 和 64 位(gcc 4.4.7-4、binutils 2.20.51... 和 gdb 7.2)上尝试过,它按预期工作。它也适用于开发人员工具集(2.1)。看来您的系统出了点问题。
-
此答案可能适用:stackoverflow.com/a/18408197/2554472。 gcc 4.8 默认会以旧版本 gdb 无法识别的格式发出调试信息。