Linux c源程序编译(gcc gdb)

1.如果一个c源程序编译没通过,那么他的可执行文件是不会显示在当前目录下对吗?
如 gcc -o hello hello.c 如果hello.c有问题,编译没通过,那么当前目录是不会有hello这个文件?

2.编译没通过是因为源程序有什么样的错误呢?

3.如果没这个hello文件,那么就不能用gdb调试。请问gdb主要是调试出什么样的错误呢?

望大家帮帮我这个Linux新手!



作者: guixuhui2   发布时间: 2011-03-22

1. 不会有可执行程序
2. 有被编译器能够发现的错误
3. 调试编译器发现不了的错误

作者: yui   发布时间: 2011-03-22

1.编译没有通过不会生成可执行文件,所以不会显示,你可以用 -S 选项看看能不能生成汇编文件,用-c看看能不能生成目标文件,再用-o 看看能不能生成链接的可执行文件。
2.错误有可能是语法错误,也有可能是链接错误,一步一步查。
3.gdb一般调试你的程序的逻辑错误。一般与具体应用相关的。

 

作者: wangtingguang   发布时间: 2011-03-22

1,不会产生,好比hello.c中因为有bug而流产,所以不会产生hello可执行文件
2,编译一般包括词法、文法、语意等一系列的检查,每一步有问题就会卡住
3,用gdb调试的时候需要在编译时候加-g选项来帮助调试,一般帮助处理逻辑错误等

作者: thefirstz   发布时间: 2011-03-22

比如说:
char *p;
p = 0;
*p = 0;
以上几行完全没有语法错误,所以编译的时候不会出错,但是一运行就会挂掉。
gdb就是用来调试类似这种,语法正确但是功能不正确的

作者: bluejays   发布时间: 2011-03-22

再举个例子:
int age;
ageee = 234;
这里把变量的名字写错了,属于语法错误,无法通过编译。

改正之后,
int age;
age = 234;
这次可以编译通过,但是如果输出age就会发现某人年龄是234岁,显然不对,原因是234这个值写错了,应该是23。这样的错误gcc是发现不了的。用gdb调试就是为了找出这样的错误。

作者: bluejays   发布时间: 2011-03-22

引用 2 楼 wangtingguang 的回复:

2.错误有可能是语法错误,也有可能是链接错误,一步一步查。


怎么一步一步查!
用什么工具?还是自己慢慢肉眼查?



作者: guixuhui2   发布时间: 2011-03-22

引用 6 楼 guixuhui2 的回复:
引用 2 楼 wangtingguang 的回复:

2.错误有可能是语法错误,也有可能是链接错误,一步一步查。


怎么一步一步查!
用什么工具?还是自己慢慢肉眼查?

最简单的方法就是把程序大部分注释掉,编译通过了,将注释的范围缩小。
hoho

作者: wangtingguang   发布时间: 2011-03-22

顶楼上~~

作者: a274955739   发布时间: 2011-03-22

引用 5 楼 bluejays 的回复:
再举个例子:
int age;
ageee = 234;
这里把变量的名字写错了,属于语法错误,无法通过编译。


如果程序很大,用什么方法能快速的检查出错误出在哪里。换句话说,如何在较大较繁琐的源程序中找到错误出现在ageee这里。

作者: guixuhui2   发布时间: 2011-03-22

引用 2 楼 wangtingguang 的回复:
2.错误有可能是语法错误,也有可能是链接错误,一步一步查。

如何知道是链接错了还是语法错了。能讲讲什么时候要用到链接吗?有用到库函数是不是都得在命令行
上加上-l选项?

作者: guixuhui2   发布时间: 2011-03-22