Linux GCC/G++编译器与调试器简单的入门教程

  GCC能编译C、C++、Ada、Object C和Java等语言,G++则专门用来编译C和C++语言的编译器。为保持兼容程序语言的最新特性,开发者通常选择GCC来编译C语言编写的源代码,选择G++来编译C++源代码。

1、Linux GCC/G++编译器的安装

yum -y install make     #安装make程序
yum -y install gcc      #安装GCC编译器
yum -y install gcc-c++  #安装G++编译器
yum -y install gdb      #安装gdb调试器

2、第一个程序hello world

[root@VM_0_6_centos eric]# cat helloworld.c 
#include                 //这个头文件包含基本的输入输出函数
int main()
{
        char *c;                  //声明一个字符串变量c
        c = "hello world!";
        printf("%s\n", c);        //输出该变量
        return 0;                 //程序结束时向操作系统返回0,表示正常退出
}
[root@VM_0_6_centos eric]# gcc -o helloworld helloworld.c    #编译
[root@VM_0_6_centos eric]# ls
helloworld  helloworld.c
[root@VM_0_6_centos eric]# ./helloworld 
hello world!

3、使用GDB调试程序

3.1、使用-g参数编译源代码

[root@VM_0_6_centos eric]# gcc -g -o helloworld helloworld.c    #编译并连接程序,使之包含可被调试信息

3.2、开始调试

[root@VM_0_6_centos eric]# gdb helloworld gdb helloworld        #使用GDB调试器打开helloworld可执行文件
(gdb) list   #列出GDB中打开的可执行文件代码
1       #include                 //这个头文件包含基本的输入输出函数
2       int main()
3       {
4               char *c;                  //声明一个字符串变量c
5               c = "hello world!";
6               printf("%s\n", c);        //输出该变量
7               return 0;                 //程序结束时向操作系统返回0,表示正常退出
8       }
(gdb) break 5    #对第5行打上断点
Breakpoint 1 at 0x400535: file helloworld.c, line 5.
(gdb) run        #运行打开的可执行文件
Starting program: /root/eric/helloworld 

Breakpoint 1, main () at helloworld.c:5
5               c = "hello world!";
Missing separate debuginfos, use: debuginfo-install glibc-2.17-292.el7.x86_64
(gdb) print c   #查看变量c的值,因为此时的断点打在这里还没执行,所以此时还没有值
$1 = 0x0
(gdb) next      #单步执行程序(step可进入所调用的函数内部)
6               printf("%s\n", c);        //输出该变量
(gdb) print c   #查看变量c的值,此时发现已经赋好值
$2 = 0x4005e0 "hello world!"
(gdb) continue  #从断点处继续执行
Continuing.
[Inferior 1 (process 4936) exited normally]
(gdb) quit		#退出gdb调试
[root@VM_0_6_centos eric]# 

3.3、GDB常用调试命令

命令

命令简写

描述

file <文件名>   在GDB中打开执行文件
break  b 设置断点, break <函数名 | 行号 | 地址>  
info   查看和可执行程序相关的各种信息
kill   终止正在调试的程序
print p 打印表达式的值,通过表达式可以修改变量的值或者调用函数
set args   设置调试程序的运行参数
set var   修改变量的值
delete   删除设置的某个断点或观测点
clear   删除设置在指定行号或函数的断点
continue c 从断点处继续执行程序
list l 列出源代码,接着上次的位置往下列,每次列10行
list 行号 l 行号 列出从第几行开始的源代码
list 函数名 l 函数名 列出某个函数的源代码
watch   在程序中设置观测点
run   运行打开的可执行文件
next n 执行下一行语句
step s 执行下一行语句,如果有函数调用则进入到函数中
backtrace bt 查看各级函数调用及参数
finish   连续运行到当前函数返回为止,然后停下来等待命令
frame 帧编号 f 选择栈帧
info locals i 查看当前栈帧局部变量的值
quit q 退出gdb调试环境
start   开始执行程序,停在main函数第一行语句前面等待命令
ptype   显示数据结构定义情况
make   编译程序

 

 

你可能感兴趣的:(GCC,gdb,编译器,linux)