我正在使用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机器的最终输出中为某个项目提供调试信息。
有关获取最终可执行文件中行号信息的任何建议/意见将不胜感激。
答案 0 :(得分:1)
您需要编译并链接gcc -g
。也许你在链接时忘记了-g
标志。
并且肯定希望使用gcc -Wall -g
进行编译,因为警告非常有用。
您应该在ELF可执行文件上运行gdb
,而不是在目标文件上运行(因此 是错误的):gdb sum.o
gdb ./output
您应该拥有Makefile
(请参阅this example)并使用GNU构建您的程序make
也许远程Redhat服务器上的gdb
不接受与本地笔记本电脑相同的DWARF格式。检查gdb
的版本。 (也许考虑在远程服务器上进行编译,或者将一些明确的debugging option(例如-gdwarf-3
或适合远程gdb
的任何内容传递给您的gcc
笔记本电脑编译器)。