先查看linux有没有gcc 和 gdb

$ gcc -v

$ gdb -v

如果没有安装gcc,可以 $ yum install gcc

要获取管理员权限才能安装软件,$ su root (有的linux是sudo root)

gdb的安装和gcc一样。

编译命令:

$ gcc -o <输出文件名> <源文件名>

执行命令:

$ ./<输出文件名>

调试命令:

1.  在编译的时候:gcc -o <输出文件名> -g <源文件名>

2.  $ gdb <输出文件名>

查看源代码 :(gdb) l <第几行开始>

增加断点:(gdb) b <第几行>

运行:(gdb) run

查看变量:(gdb) p <变量名>

继续:(gdb) c

退出:(gdb) q

帮助:(gdb) help

/************************************如果你还是有疑惑************************************************/

下面通过一个很简单的例子来说明。

1 .编写C程序:$ vim test.c

进入vim后,按 i 进入编辑模式

输入如下代码:

    #include<stdio.h>
#define N 10
int main(void){
int a[N] = {,,,,,,,,,};
int i;
for(i=;i<=N;i++){
printf("%d ",a[i]);
}
printf("\n");
return ;
}

完成之后,按ESC ,然后按 shift+: 进入vim命令行模式 输入 wq保存并退出vim 回到 shell

2. 编译:

$ gcc -o test test.c (其中-o 表示将编译后的可执行文件命名为test)

3. 执行:

$ ./test

得到的结果是:1 2 3 4 5 6 7 8 9 10 0

怎么多了一个0?

源代码的本意是打印从a[0]到a[N-1]的值,但是某个初学C语言的同学粗心了,怎么也得不到正确结果,程序出现了问题,对着代码看了许久都没有发现问题所在。

所以他决定调试,但是他不知道在Linux命令行下怎么调试。

4. 调试

  首先,重新编译C程序:

  $ gcc -o test -g test.c

  和刚才编译的命令多了一个 “-g” 这个表示生成的文件可用gdb来调试。

  $ gdb test

  进入调试界面

  (gdb) l 1                         //(字母“L”的小写 和 1) 会输出从第一行开始的源代码。

  (gdb) b 7                       //(在源代码的第7行加断点,b是breakpoint的缩写)

  (gdb) run                      // 这时候程序会在第七行停止。

  (gdb) p i                       // 表示打印i的值,p是print的缩写,这时会输出 :$1 = 0 ,即 i == 0

  (gdb) p a[i]                   // 表示打印a[i]的值,p是print的缩写 这时会输出:$2 = 1 ,即 a[i] == 1

  (gdb) c                       // 继续执行,程序会在第七行停止,这时候可以用p命令来查看相应的值。

  最后当程序运行到 i == 9的时候,发现a[9]已经等于10了,该同学觉得下一步程序应该要正常退出才对,于是,他输入了 (gdb) c

  结果发现 程序继续停在第七行,他非常纳闷,于是 (gdb) p i ,发现 i == 10,(gdb)p a[i] == 0,这时他才猛然想起老师教的内容:数组大小为10,范围是从0到9

  然后

  (gdb) l 7                     // 打印第七行前后几行的源代码

  这时他发现他的代码第六行:for(i=0;i<=N;i++)

  原来问题出在这个'='上,他发现了问题所在。

  于是

  (gdb) q                       //结束当前调试,返回shell命令行界  

  再次用 vim test.c 打开源文件 修改了代码

  最后他重新编译了一遍

  gcc -o test test.c

  这一次,他终于得到了正确的答案,然后他顺便学会了gdb来调试C程序。

Linux下C程序的编译,运行,及调试的更多相关文章

  1. Linux下librdkafka客户端的编译运行

    Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来 ...

  2. Linux下C程序的编辑,编译和运行以及调试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. [转]Caffe在Linux下的安装,编译,实验

    Caffe在Linux下的安装,编译,实验  原文地址:http://www.cnblogs.com/evansyang/p/6150118.html 第一部分:Caffe 简介 caffe是有伯克利 ...

  4. Linux 下提高make的编译效率

    Linux下安装程序,一般都通过包管理器安装,但是包管理器或软件商店里的软件往往不是最新版本的,安装最新版软件时通常是下载源代码进行编译. 编译安装源代码时就离不开make了,但是make是单线程的, ...

  5. Linux下C程序内存泄露检测

    在linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在lin ...

  6. Linux下 SpringBoot jar项目后台运行、查看、停用

    运行java jar: nohup java -jar **-0.0.1-SNAPSHOT.jar & 查看进程: 采用top或者ps aux命令.一般 如果后台是springboot,jar ...

  7. Linux下C程序的内存映像

    2.Linux下C程序的内存映像 2.1. 代码段.只读数据段(1)对应着程序中的代码(函数),代码段在Linux中又叫文本段(.text)(2)只读数据段就是在程序运行期间只能读不能写的数据,con ...

  8. linux下c程序调用reboot函数实现直接重启【转】

    转自:http://www.blog.chinaunix.net/uid-20564848-id-73878.html linux下c程序调用reboot函数实现直接重启 当然你也可以直接调用syst ...

  9. 位图文件(BMP)格式以及Linux下C程序实现(转)

    源:位图文件(BMP)格式以及Linux下C程序实现 说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图 ...

随机推荐

  1. php开启openssl的方法

    windows下开启方法: 1: 首先检查php.ini中:extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘:’, 如果不存在这行,那么添加extensio ...

  2. 20145227 《Java程序设计》第2周学习总结

    20145227 <Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 1.基本类型:在java中基本类型主要分为整数.字节.浮点数.字符与布尔. 整数:分为s ...

  3. vnc里鼠标拖动终端就会产生ctrl+c终端

    然后把有道词典给关了就好了...

  4. syntactically incorrect() 404

    遇到这个错误就来记录一下吧. 这个错误是springMVC报出的错误.大致的意思就是form传值的类型和controller中的参数不符. 有可能是名字错误,有可能是类型不对.比如前面你传来的是  p ...

  5. Hangover 分类: POJ 2015-06-11 10:34 12人阅读 评论(0) 收藏

    Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108765   Accepted: 53009 Descr ...

  6. Uva 1218 完美的服务

    题目链接:https://uva.onlinejudge.org/external/12/1218.pdf 题意: 一个网络,选出一些点做服务器,使满足一些条件,求服务器最少数量.条件是,每个计算机恰 ...

  7. yum mysql on centos 7

    参考:https://www.linode.com/docs/databases/mysql/how-to-install-mysql-on-centos-7 centos 7上没有办法使用yum i ...

  8. 如何让其他计算机访问我的计算机上数据库mysql

    第一种:能ping通,说明你们在同一个网络中,可以直接访问.你只要在你的登录用户中的帐号加上可外部访问就可以了...也就是授权.比如你的帐号是root   你可以进入mysql后, 你可以看到,每个帐 ...

  9. 3.linux man手册

    (12) man作用:查询man手册,获得帮助信息man 1 ls 1表示查询的是linux命令man 2 xxx 2表示查询的是linux apiman 3 xxx 3表示查询的是C库函数注意:在m ...

  10. 解决This function or variable may be unsafe

    工程名字右键属性-->C/C++-->预处理器-->预处理器定义-->加入:_CRT_SECURE_NO_WARNINGS