先查看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. MyEclipse下搭建maven项目

    由于maven在构建项目方面确实比较出色,现今绝大多数人构建项目都采用maven,而且绝大多数人都采用eclipse作为开发环境,今天我用myeclipse搭建了一个demo,虽然基本上不会采用mye ...

  2. JavaEE基础(十八)/集合

    1.集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 ...

  3. [HTML]网页开发学习笔记

    为了要开发一套教学使用的教师管理系统,(客户需求使用网页做教师控制端口)我便学习了一下HTML网页开发. 很不错的学习开发的网站:http://www.w3school.com.cn/index.ht ...

  4. ACM题目————最短路径问题

    Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input 输入n,m,点 ...

  5. quick lua 使用spine骨骼动画

    看下下面两个文件 <spine/SkeletonRenderer.h><spine/SkeletonAnimation.h> 1.lua中创建方法: sp.SkeletonAn ...

  6. sql 取时间 问题集

    一. AND B.TRAFFICE_DATE>dateadd(day,5,(select getdate())) dateadd(day,5,(select getdate())):为当前时间+ ...

  7. 我的CSS样式记事本(1)

    文本 行高: line-height 对齐方式: text-align 字符间距: letter-spacing 文本修饰: text-decoration字体 设置字体所有: font 字体类型: ...

  8. 怎么查看jar包版本

    jar包根目录里的META-INF目录下的MANIFEST.MF文件里一般有会记录版本信息,可以到这个文件里查看 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录 ...

  9. Uva 12186 工人的请愿书

    题目链接:https://uva.onlinejudge.org/external/121/12186.pdf 题意: 给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板, ...

  10. E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方案

    转载自:http://www.cnblogs.com/eddy-he/archive/2012/06/20/2555918.html cd /var/lib/dpkg sudo mv info inf ...