首页 > 技术文章 > 快乐Linux —— 2. gcc & g++ & gdb 常规操作

starrys 2019-11-19 22:12 原文

0. 简述

​ 讲讲基础的gcc操作,和程序生成简单过程,和gdb的基础操作。

1. gcc 与 g++ 区别

​ 两者都可以编译C文件和C++文件,但g++会默认链接C++的库,而gcc要编译C++的话要显示链接stdc++库。

gcc -o _Main hello.cpp -lstdc++

g++ -o _Main hello.cpp

2. gcc 基本操作

  1. 预编译(.c/.cpp -> .i)

    处理预编译指令,展开头文件,宏替换,删除注释

    gcc -E 源.c -o 源.i

  2. 编译 (.i -> .s)

    词法,语法解析,代码优化,汇总符号,生成汇编指令

    gcc -S 源.i

  3. 汇编 (.s -> .o)

    将汇编指令翻译成二进制,生成各个段,生成符号表

    gcc -c 源.s

  4. 链接 (.o -> 可执行文件)

    合并所有段,调整各个段大小,进行符号解析,给符号分配虚拟地址,进行符号重定位

    gcc -o 可执行文件 源.o

3. Debug 与 Release

​ Debug 版本称为调试版本,在编译时会加入一些调试信息

​ Release 发行版本

​ //gcc -o 默认生成的是release版本

gcc -o release 源.c

gcc -o debug 源.c -g

4. 常见gdb命令

  1. 显示源代码

    l 显示主函数所在文件的源码

    list filename:line 显示指定文件的源码

  2. 断点管理

    b linenum 给默认最近显示的文件指定行添加断点

    b filename:linenum 给指定文件指定行添加断点

    b funcname 给函数的第一行添加断点

    info b 显示所有断点信息

    d bpnum 删除指定断点编号

  3. 单步执行的流程控制

    r 启动调试

    s / n 逐语句 / 逐过程

    u / finish 退出循环 / 退出函数

    c 执行到下一次断点

    q 退出gdb

  4. 查看变量的值

    p _var / display _var 显示对象值,每一步都显示

    ptyoe _var 显示变量类型

    bt 显示函数调用过程

推荐阅读