先查看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. Web SQL

    HTML5本地存储——Web SQL Database 基于 HTML5 中的 Web SQL Database 来构建应用程序 前端HTML5几种存储方式的总结 <!DOCTYPE HTML& ...

  2. C#中的托管和非托管

    注意!先看左上角声明!我不想误人子弟!但我不怕思考.没有思考就没有错误,互相学习,共同进步! 百度中的“专业人士”回答中出现了这句话(不知道是不是专业人士啊 百度说的)“1.是指托管代码,托管代码(M ...

  3. 解决php与IIs的冲突

    ISS与apache 服务器的默认端口号为 :80: 在浏览时,无法访问到. 可以将 apache的端口 改变即可: Apache安装好后,在其安装目录下的conf文件夹内会有httpd.conf这样 ...

  4. 使用Jil序列化JSON提升Asp.net web api 性能

    JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入自定义的MediaTypeFormatter(媒体格式化器), 说白了 ...

  5. yii2 批量插入or更新

    $sql1 = 'insert into business_ip (gid, name, area, belongName, belongArea, destIPv4, created, update ...

  6. OperService.class.php

    <?php class OperSerVice{ public function getResult($num1,num2,oper){ switch($oper){ case "+& ...

  7. [xcode]instruments来检验你的app

      原文网址:http://www.cocoachina.com/industry/20140114/7696.html     比较了好多关于instruments 还是发现老外写的比较牛逼.于是果 ...

  8. css写法优化

    写css关于id,class等的命名,文件的结构,共同模块的提取,代码的复用性,可读性,扩展性,维护性都要考虑,不然后期可以会需要花大力气去进行维护修改.考虑写出足够科学的css,需要考虑下面几个方面 ...

  9. 将ASCII码位于32~126的95个字符输出到屏幕上,为了美观

    //将ASCII码位于32~126的95个字符输出到屏幕上,为了美观.要求小于100的码,前面加一个0,每八个转行class shijixing{ public static void main(St ...

  10. java中MD5加密的小使用

    最近项目中需要用到md5加密,就自己在网上看了看. package com.wxgs.ch01; import java.security.MessageDigest; import java.sec ...