程序编写

命令行下的有vi,emacs

有界面的kwrite等等

编译用gcc

调试用gdb

一个编译调试示例

——————

源程序:tst.c

1 #include <stdio.h>

2

3 int func(int n)

4 {

5 int sum=0,i;

6 for(i=0; i<n; i++)

7 {

8 sum+=i;

9 }

10 return sum;

11 }

12

13

14 main()

15 {

16 int i;

17 long result = 0;

18 for(i=1; i<=100; i++)

19 {

20 result += i;

21 }

22

23 printf("result[1-100] = %d \n", result );

24 printf("result[1-250] = %d \n", func(250) );

25 }

编译生成执行文件:(Linux下)

hchen/test> gcc -g tst.c -o tst

使用GDB调试:

hchen/test> gdb tst <---------- 启动GDB

GNU gdb 5.1.1

Copyright 2002 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i386-suse-linux"...

(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

1 #include <stdio.h>

2

3 int func(int n)

4 {

5 int sum=0,i;

6 for(i=0; i<n; i++)

7 {

8 sum+=i;

9 }

10 return sum;

(gdb) <-------------------- 直接回车表示,重复上一次命令

11 }

12

13

14 main()

15 {

16 int i;

17 long result = 0;

18 for(i=1; i<=100; i++)

19 {

20 result += i;

(gdb) break 16 <-------------------- 设置断点,在源程序第16行处。

Breakpoint 1 at 0x8048496: file tst.c, line 16.

(gdb) break func <-------------------- 设置断点,在函数func()入口处。

Breakpoint 2 at 0x8048456: file tst.c, line 5.

(gdb) info break <-------------------- 查看断点信息。

Num Type Disp Enb Address What

1 breakpoint keep y 0x08048496 in main at tst.c:16

2 breakpoint keep y 0x08048456 in func at tst.c:5

(gdb) r <--------------------- 运行程序,run命令简写

Starting program: /home/hchen/test/tst

Breakpoint 1, main () at tst.c:17 <---------- 在断点处停住。

17 long result = 0;

(gdb) n <--------------------- 单条语句执行,next命令简写。

18 for(i=1; i<=100; i++)

(gdb) n

20 result += i;

(gdb) n

18 for(i=1; i<=100; i++)

(gdb) n

20 result += i;

(gdb) c <--------------------- 继续运行程序,continue命令简写。

Continuing.

result[1-100] = 5050 <----------程序输出。

Breakpoint 2, func (n=250) at tst.c:5

5 int sum=0,i;

(gdb) n

6 for(i=1; i<=n; i++)

(gdb) p i <--------------------- 打印变量i的值,print命令简写。

$1 = 134513808

(gdb) n

8 sum+=i;

(gdb) n

6 for(i=1; i<=n; i++)

(gdb) p sum

$2 = 1

(gdb) n

8 sum+=i;

(gdb) p i

$3 = 2

(gdb) n

6 for(i=1; i<=n; i++)

(gdb) p sum

$4 = 3

(gdb) bt <--------------------- 查看函数堆栈。

#0 func (n=250) at tst.c:5

#1 0x080484e4 in main () at tst.c:24

#2 0x400409ed in __libc_start_main () from /lib/libc.so.6

(gdb) finish <--------------------- 退出函数。

Run till exit from #0 func (n=250) at tst.c:5

0x080484e4 in main () at tst.c:24

24 printf("result[1-250] = %d \n", func(250) );

Value returned is $6 = 31375

(gdb) c <--------------------- 继续运行。

Continuing.

result[1-250] = 31375 <----------程序输出。

Program exited with code 027. <--------程序退出,调试结束。

(gdb) q <--------------------- 退出gdb。

怎么在linux编辑程序后编译,在linux里,c程序的编辑、编译、调试的详细步骤是什么?...相关推荐

  1. linux开机自启动python脚本_Linux下Python脚本自启动和定时启动的详细步骤

    一.Python开机自动运行 假如Python自启动脚本为 auto.py .那么用root权限编辑以下文件: sudo vim /etc/rc.local 如果没有 rc.local 请看 这篇文章 ...

  2. 用u盘把红旗linux操作系统安装到电脑硬盘c:,把系统装进U盘的详细步骤

    现如今安装windows系统的方法很多种,比较常用到就是U盘安装,安全,可靠.但是前提是你U盘里面有操作系统.那么操作系统如何装进U盘,直接当移动的系统来使用?下面小编告诉大家具体操作方法. 具体方法 ...

  3. 使用gcc编译和链接C语言程序,用GCC编译链接程序--编译链接器GCC常用功能(菜鸟级)...

    转载自:http://daimajishu.iteye.com/blog/1089740 对gcc认识的一篇文章,就转载了,截取了自己感兴趣部分. 一,GCC编译器简介 虽然我们称Gcc是C语言的编译 ...

  4. linux 解压缩后没权限,Linux的权限管理及基础常用命令

    chmod  改变文件或目录权限 英语原意:change the permissions mode of a file 语法:1.chmod[ugoa][+-=][rwx][文件或目录] 执行权限:文 ...

  5. linux扩容后显示管理,linux之lvm管理及扩容

    本文为:Centos6.0系统 1.LVM介绍 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauel ...

  6. Linux cd后显示文件,关于linux系统显示文件的问题!

    写个函数在家目录的 .bashrc, 如是 #function: lcd , change dir and display content of dir lcd () { local ret cd & ...

  7. linux安装后启动mysql,linux安装完mysql后启动错误

    redhat as 4,使用rpm包安装完mysql的server 跟client后执行以下命令出错. [root@ftp etc]# /usr/bin/mysqladmin -u root pass ...

  8. linux命令后加adm,Linux如何把当前的用户添加到sudoer中

    使用sudo可以在以非root用户登录时临时获得root权限,并执行需要的命令.可以使用sudo的用户可以叫做sudoer. 添加sudoer的方法(假设您已经安装sudo): 执行 visudo 或 ...

  9. linux(Ubuntu)下安装英伟达的显卡驱动、cuda和cudnn详细步骤

    这里是使用最新的方法安装cuda+cudnn的方法,建议先查看对应的驱动,英伟达的系列安装一般分为为三个部分: 显卡驱动的安装.CUDA安装.cudnn安装 显卡驱动  通过这个命令查看:nvidia ...

最新文章

  1. 论文免费开源:NB-IoT智慧路灯监控系统
  2. CV进入三维时代!Facebook在ICCV 2021 发布两个3D模型,自监督才是终极答案?
  3. winsock I/O模型
  4. IPMI与iDrac的区别
  5. 无线数传电台rs232和rs485串口接口:230M数传电台
  6. 区块链组织架构_区块链可以加速开放组织的5种方式
  7. C#通过Socket在网络间发送和接收图片的演示源码
  8. mysql正删改查返回值_MySQL增删改查
  9. Bret Victor(苹果 UI 设计师):互动的未来不应只在手指上
  10. Codeforces 702B【二分】
  11. c语言编写算术编码,编程实现算术编码算法.doc
  12. 游侠随笔:关于业务型数据库审计 有图有真相
  13. MySQL45讲学习笔记(二)
  14. SQL语法INSERT INTO_大数据培训
  15. Google表单初学者指南
  16. html5播放器播放尺寸出界了,尺寸规范
  17. python生成带背景的字符图片(crnn数据集制作)
  18. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程.]
  19. Docker 安装nigix、tomcat、es+kibana和portainer可视化
  20. HTML 框架、列表和table标签练习 第二个模块2

热门文章

  1. golang入门小记
  2. vue.js更改颜色_如何使用Vue.js实现简单的标题更改应用程序
  3. 传智播客 c#_播客#46:Alexander Kallaway
  4. 提交表单数据到数据库_普通表单不仅适用于数据库
  5. rails db 查询优化_如何优化查询以解决Rails中常见的可伸缩性瓶颈
  6. 为什么Redux需要reducer成为“纯函数”
  7. 125_Power BI 中 DAX 的性能测试
  8. nfsd linux是什么进程,Linux 下的 NFS 系统简介
  9. mongodb python 大于_5、Python操作MongoDB
  10. PAT练习题:D进制的A+B(C++)