Linux GCC/G++编译器与调试器
Linux GCC/G++编译器与调试器
GCC/G++编译选项
在 Linux 系统中,用户创建进程时会先在系统的进程表中为进程创建独一无二的编码,即 PID。 PID 是一个正整数,其取值范围是 2~32768。进程创建时会顺序挑选下一个未使用的编号数字作为自己的 PID。如果它们已经经过一圈的循环,新的编码将重新从 2 开始。数字 1 一般是为特殊进程 init 保留的,它负责管理其他的进程。例如,执行下列命令会显示系统内的所有进程。
ps -e
ANSI C 标准
C 语言设计的程序是由函数所组成的,在函数被详细定义前,可先在头文件定义函数原型,这样函数间可更容易地相互调用。头文件<unistd.h>包含了许多 Linux 系统服务的函数原型,例如 read()、 write()和 getpid()函数,它们的原型如下:
函数原型由函数的返回类型、函数名和参数 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命令及解释
可在为变量赋值前加入断点,并运行程序
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 命令将运行到下一个断点或者程序结束。