GCC、GNU、gcc与g++

#部分转载知乎文章详解C/C++代码的预处理、编译、汇编、链接全过程 - 知乎

#just for方便管理

1 什么是GCC、GNU、gcc与g++

  • GNU:一个操作系统,具体内容不重要
  • GCC:GNU Compiler Collection(GNU编译器集合)的缩写,可以理解为一组GNU操作系统中的编译器集合,可以用于编译C、C++、Java、Go、Fortan、Pascal、Objective-C等语言。
  • gcc:GCC(编译器集合)中的GNU C Compiler(C 编译器)
  • g++:GCC(编译器集合)中的GNU C++ Compiler(C++ 编译器)

 注意:简单来说,gcc调用了GCC中的C Compiler,而g++调用了GCC中的C++ Compiler。 - 对于 *.c 和 *.cpp 文件,gcc分别当作 c 和 cpp文件编译,而g++则统一当作cpp文件编译

2. 代码编译命令

gcc/g++常用指令选项:

3.GDB

GDB(gdb)全称“GNU symbolic debugger”,是 Linux 下常用的程序调试器。

通过详解C/C++代码的预处理、编译、汇编、链接全过程 - 知乎我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。

3.1 为了能够使用 gdb 调试,需要在代码编译的时候加上-g

g++ -g -o test test.cpp

3.2 调试过程介绍

3.2.1 编译程序加参数时生成调试信息

 

3.2.2 gdb常用调试命令

3.2.2.1 启动与退出
  • 启动:gdb 可执行程序
  • 退出:quit/q
3.2.2.2 给程序设置参数/获取设置参数
  • 设置参数:set args 10 20
  • 获取设置参数:show args
3.2.2.3 查看当前文件代码
  • 从默认位置显示:list/l   //list或小写的L
  • 从指定的行显示:list/l 行号   //此行号在显示的上下文中间位置
  • 从指定的函数显示:list/l 函数名
3.2.2.4 查看非当前文件代码
  • 编译运行并使用gdb main
  • 从指定文件指定的行显示:list/l 文件名:行号
  • 从指定文件指定的函数显示:list/l 文件名:函数名
3.2.2.5 查看及设置显示的行数
  • 查看显示的行数:show list/listsize
  • 设置显示的行数:set list/listsize
3.2.2.6 断点操作
  • 查看断点:i/info b/break

  • 设置一般断点

    • b/break 行号
    • b/break 函数名
    • b/break 文件名:行号
    • b/break 文件名:函数
  • 设置条件断点(一般用在循环的位置):b/break 10 if i== 5

  • 删除断点:d/del/delete 断点编号
  • 设置断点无效:dis/disable 断点编号
  • 设置断点生效:ena/enable 断点编号
3.2.2.7 调试操作
  • 运行 GDB 程序
    • 程序停在第一行:start
    • 遇到断点才停:run
  • 继续运行,到下一个断点停:c/continue
  • 向下执行一行代码(不会进入函数体):n/next
  • 变量操作
    • 打印变量值:p/print 变量名
    • 打印变量类型:ptype 变量名
  • 向下单步调试(遇到函数进入函数体)
    • s/step
    • 跳出函数体:finish
  • 自动变量操作
    • 自动打印指定变量的值:display 变量名
    • 查看自动变量:i/info display
    • 取消自动变量:undisplay 编号
  • 其它操作
    • 设置变量值:set var 变量名=变量值 (循环中用的较多)
    • 跳出循环:until
  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值