关于make的文件使用gdb调试,list指令不能显示代码详细的问题(已解决)

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
sunuechao
帖子: 3
注册时间: 2014-08-11 16:25

关于make的文件使用gdb调试,list指令不能显示代码详细的问题(已解决)

#1

帖子 sunuechao » 2014-08-11 16:43

test.h

代码: 全选

int add(int a, int b);
add.c

代码: 全选

#include"test.h"

int add(int a, int b)
{
 return (a+b);
}
main.c

代码: 全选

#include"test.h"
#include<stdio.h>

void main()
{
  int a = 3, b = 4, c;
  c = add(a,b);
  printf("hello world\n");
  printf("%d add %d is %d\n",a,b,c);
}
makefile

代码: 全选

test: main.o add.o
	gcc -g -o test main.o add.o
main:  test.h main.c
	gcc -g -c main.c
add: add.c test.h
	gcc -g -c add.c
clean:
	rm -rf test
	rm -rf *.o
使用gdb test调试,可以run,但是list提示没有那个目录或者文件,不知道是哪里的问题,是我的makefile写错了吗?我直接使用gcc -g -o test main.c add.c test.h编译,然后gdb是可以的,哪里错误了呢?望指教
上次由 sunuechao 在 2014-08-12 15:43,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 关于make的文件使用gdb调试,list指令不能显示代码详细的问题

#2

帖子 astolia » 2014-08-11 19:54

你make的时候看到的应该是
cc -c -o main.o main.c
cc -c -o add.o add.c
gcc -g -o test main.o add.o
编译时并没有带入-g选项,而且用的是cc,这是因为实际使用的是make的隐含编译规则而不是你写那几条

简单的解决方案是把.o补上

代码: 全选

test: main.o add.o
	gcc -g -o test main.o add.o
main.o:  test.h main.c
	gcc -g -c main.c
add.o: add.c test.h
	gcc -g -c add.c
clean:
	rm -rf test
	rm -rf *.o
sunuechao
帖子: 3
注册时间: 2014-08-11 16:25

Re: 关于make的文件使用gdb调试,list指令不能显示代码详细的问题

#3

帖子 sunuechao » 2014-08-12 10:04

楼上的解答是正确的,make后是这个样子

代码: 全选

gcc -g -c main.c
gcc -g -c add.c
gcc -g -o test main.o add.o
试过了可以列出详单信息,也能够设置断点进行调试。
这里说个题外话,在linux中执行当前目录下的文件要加上./,和W有区别,网上看了下资料,原来是系统路径的问题,参见http://blog.csdn.net/snakebite1985/article/details/1638453。最后对沙发表示由衷感谢。
回复