Linux GCC/G++编译器与调试器

Linux GCC/G++编译器与调试器

GCC/G++编译选项

Linux GCC/G++编译器与调试器

在 Linux 系统中,用户创建进程时会先在系统的进程表中为进程创建独一无二的编码,即 PID。 PID 是一个正整数,其取值范围是 2~32768。进程创建时会顺序挑选下一个未使用的编号数字作为自己的 PID。如果它们已经经过一圈的循环,新的编码将重新从 2 开始。数字 1 一般是为特殊进程 init 保留的,它负责管理其他的进程。例如,执行下列命令会显示系统内的所有进程。

ps -e

ANSI C 标准

C 语言设计的程序是由函数所组成的,在函数被详细定义前,可先在头文件定义函数原型,这样函数间可更容易地相互调用。头文件<unistd.h>包含了许多 Linux 系统服务的函数原型,例如 read()、 write()和 getpid()函数,它们的原型如下:

Linux GCC/G++编译器与调试器

函数原型由函数的返回类型、函数名和参数 3 部分组成。

类属指针
类属指针是一种能够同时支持所有数据类型的指针。函数原型中常用的“ void *”类型即是类属指针。 ANSI C 标准常用类属指针代替函数参数中的其他指针,使同一个函数能支持多种数据类型。

原始系统数据类型
在函数原型中以“ _t”结尾的类型被称为原始系统数据类型。原始系统数据类型定义在头文件 sys/types.h 中,以 typedef 操作符加以定义。


标准c程序结构

#include <stdio.h>      注意和C++的区别

int main(){

     return 0;

}

 

 


GDB 调试器

GDB 常用调试命令

gcc -g -o helloworld helloworld.c //编译并连接程序,使之包含可被调试信息
gdb helloworld //使用 GDB 调试器打开 helloworld 可执行文件

常用GDB命令及解释

Linux GCC/G++编译器与调试器

可在为变量赋值前加入断点,并运行程序

break 5

run

检查数据:

在程序中加入断点后,程序运行时会在断点处暂时停止,以便检查程序中的数据。通过检查数据可判断出许多种错误的所在。 helloworld 程序在第 5 行加入了断点,这时第 5行的代码并未执行。检查变量 c 的值可输入如下命令:
(gdb) print c //显示变量 c 的值
命令执行后可见输出结果为:
$1 = 0x4e54eff4 "|\355TNv~;N"
该结果表明变量 c 所指向的地址为 0x4e54eff4。继续执行程序,使用单步执行方式,再检查变量 c 的值,输入下列命令:
(gdb) next //单步执行程序
(gdb) print c //显示变量 c 的值
执行后可见输出结果为:
$2 = 0x80484c4 "hello world!"
表明变量 c 指向了地址 0x80484c4,该地址的内容转换为 ASCII 码的结果为 helloworld!。如果还要继续运行程序,输入 continue 命令将运行到下一个断点或者程序结束。