Linux下C开发之gcc,gdb的使用

gccgdb的使用

作者:zccst

 

上周五在图书馆借了一本《Linux软件工程师(C语言)实用教程》,让我收获良多。不仅仅是书中的知识,还有对知识体系和架构认识的深入。

 

LinuxC开发:

1gcc,gdb的使用。

2Makefile文件的编写。

3,系统函数的使用

4,文件操作

5,串行通信

6,进程控制

7,进程间通信

8,网络编程

9,图形编程

10,数据库编程

11qt编程

 

 

 

 

LinuxC开发之——gccgdb的使用

 

gcc编译器

前提编辑工具的使用:vi  vim  Emacs

vi hello.c

一、常见步骤:

对于只有一个源文件的简单程序,常常只有编译,运行两步。

1gcc hello.c -o hello

2./hello

 

二、gcc编译流程

gcc and g++分别是gnuc & c++编译器 gcc/g++在执行编译工作的时候,总共需要4

hello.c  (源码) 

 

hello.i  生成预处理文件,

参数是“-E”,把hello.c -> hello.i。完整命令为gcc hello.c -o hello.i -E

 

hello.s  编译生成汇编文件, 

参数是“-S”,把hello.i -> hello.s。完整命令为gcc hello.i -o hello.s -S

 

hello.o  将汇编文件变为目标代码, 

参数是“-c”,把hello.s -> hello.o。完整命令为gcc hello.s -o hello.o -c

 

hello    链接目标代码,生成可执行程序, 

参数无,      hello.o -> hello  完整命令为gcc hello.o -o hello

 

./hello  (运行)

 

三、gcc的主要参数

1,总体参数

-E                  只进行预编译,不做其他处理

-S                  只是编译不汇编,生成汇编代码

-c                  只是编译不链接,生成目标文件“.o

-o file             把输出文件输出到file

-g                  在可执行程序中包含标准调试信息

-v                  打印出编译器内部编译各过程的命令行信息和编译器的版本

-I dir              在头文件的搜索路径列表中添加dir目录

-L dir              在库文件的搜索路径列表中添加dir目录

-static             链接静态库

-llibrary           连接名为library的库文件

 

 

2,警告和出错参数。

-w     关闭警告

-ansi  显示不符合ANSI C标准语法的警告信息

-pedantic

-Wall  跟踪调试的有力工具,最后养成使用此参数的习惯。

 

3,优化参数。

通过参数“-On”来生成优化代码。其中n是一个代表优化级别的整数,较典型范围是从023.数字越大优化的等级越高,程序运行速度越快。常用-O2,因为它在优化长度,编译时间和代码大学之间取得一个比较理想的平衡点。比较:1-8.c(代码略)

gcc 1-8.c -o 1-8

time ./1-8

 

gcc 1-8.c -o 1-8 -O2

time ./1-8

注:如下场合应避免优化代码。

(1)程序开发时。只有到软件发行或开发结束时,才考虑对最终生成的代码进行优化。

(2)资源受限时。如内存资源非常紧张时(一些实时嵌入式设备)。

(3)跟踪调试时。优化可能会删除、改写或重组代码,从而使跟踪调试变得异常困难。

 

gdb调试器

gdb调试的不是.c源文件而是可执行文件

1,编辑源文件。

例如,vi 1-9

添加如下内容

#include <stdio.h>

int min(int x, int y);

int main()

{

  int a1, a2, min_int;

  printf("please input the frist int number:/n");

  scanf("%d", &a1);

  printf("please input the second int number:/n");

  scanf("%d", &a2);

 

  min_int = min(a1, a2);

  printf("the min number is:%d/n", min_int);

 

  return 0;

}

 

int min(int x, int y)

{

  if (x < y)

    return x;

  else

    return y;

}

 

2,编译时要加上选项“-g”,这样编译出的可执行代码才包含调试信息。

gcc 1-9.c -o 1-9 -g

 

3,进入gdb调试环境。

gdb 1-9

回车就进入了gdb调试模式。在gdb的调试环境中,提示符是“(gdb)”。

 

4,用gdb调试程序。

(1)查看源文件

语法:'l'list缩写。list<行号>|<函数名>。查看源代码,一次显示10

命令  (gdb)l 

 

(2)设置断点

语法:break 行号|函数名<条件表达式>

本例可以输入命令

(gdb)b min  在自定义的min函数出设置断点。

(gdb)b 17   功能同上

 

(3)查看断点信息

语法:info break

命令  (gdb)info b

 

(4)运行程序

语法:run

命令  (gdb)r

注:gdb默认从第一行开始运行,如果要从出现中指定行开始运行,只需输入“r+行号。

 

(5)查看变量值

语法:p 变量名。程序运行到断点处会自动暂停,此时可查看指定变量的值。

本例命令 

(gdb)p a1

(gdb)p a2

(gdb)p min_int

调试程序时,如需修改变量值,可在程序运行至断点处是,输入“set 变量=设定值”。

例,给变量“a2”赋值11,输入“set a2=11”。

 

(6)单步调试

语法:

n(next),若有函数,不进入函数调用。

s(step),若有函数,则进入函数调用。

 

(7)继续运行程序

语法:continue

命令  (gdb)c

(8)退出gdb调试环境。

语法:quit

命令  (gdb)q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值