Linux(Ubuntu)下C语言编译与调试

编译流程

gcc安装命令

sudo apt install  build-essential
  1. vim/touch 创建源文件

    vim打开编辑源文件(.c结尾)

  2. gcc -c 源文件

    默认生成同名不同后缀的.o文件,同一工程下不同文件需要独自编译

  3. 将多个.o文件链接生成目标生成执行文件

    gcc 文件名.o 文件名.o … -o 生成文件名.exe

  4. ./生成文件名.exe输出

调试流程

gdb是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具。

gdb安装命令

sudo apt install gdb
  1. 启动gdb

    在编译时需要添加-g,否则生成目标文件中缺少调试信息

    1: gcc -g -c 1.c  -->  gcc 1.o -o 1.exe
    2: gcc -g 1.c -o 1.exe // 编译链接一起操作
    3: gcc -g 1.c
    

    三种任选一种

    启动命令

    1: gdb 1.exe
    2: gdb -q 1.exe //不打印gdb版本信息,终端窗口干净
    
  2. 查看源码

    (gdb) l 行号

    不加行号默认显示10行,加行号显示行号上面5行下面4行共10行

    需要查看其他文件中定义的函数时,在l后加上函数名即可定位至这个函数所在文件并查看附近的源码。

    也可以使用(gdb) l 文件名:行号。

  3. 设置断点

    (gdb) b 行号

    运行到设置行号后停止

  4. 查看断点处情况

    (gdb)info breakpoints //显示断点信息Num //断点编号Disp //断点执行一次后是否有效。kep有效,dis无效Enb //当前断点是否有效。y有效,n无效Address //内存地址What //位置delete (断点编号) //删除断点
    
  5. 运行

    (gdb) run //运行至第一个断点处start //运行至main函数初始位置
    
  6. 单步执行

    (gdb) next //下一步step //进入函数return // 结束函数continue //运行至下一断点
    
  7. 查看变量

    (gdb) print var //单次打印变量display var //执行一步打印一次变量watch var //变量发生改变时打印变量whatis var //查看变量类型
    
  8. 结束调试

    (gdb) quit
    

调试状态下gdb的基本命令

bt backtrace //显示当前调用堆栈
info function //查询函数
info locals //显示当前堆栈页所有变量
print gdb_test(22) //将22作为参数调用gdb_test()函数
b fn 1 if a > b //条件断点设置
where //当前运行的堆栈的列表
layout split //显示源代码和反汇编窗口
info reg //显示寄存器内容
info threads //查看当前所有线程
thread n //切换到id为n的线程

Linux(Ubuntu)下C语言编译与调试相关推荐

  1. linux(ubuntu)下的tippecanoe编译及使用

    作为我的第一篇博客,也是我的写博客的探索了偷笑 另外,有使用docker的童鞋可以直接查看[三.4.] 一.安装win7 + linux(ubuntu) 教程在网上搜,别用最新版本,用16.0.4   ...

  2. linux下怎么编译贪吃蛇,Linux 环境下C语言编译实现贪吃蛇游戏(转载)

    本文转载 http://www.linuxidc.com/Linux/2011-08/41375.htm本文可以改进的就是它的链表实现的方式,可以考虑内核的链表实现 #include #include ...

  3. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  4. ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...

    目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...

  5. linux c语言 ppt,linux操作系统下c语言编程入门.ppt

    linux操作系统下c语言编程入门.ppt Linux操作系统下C语言编程入门 CNT Linux操作系统简介基础知识进程介绍文件操作时间概念消息管理线程操作网络编程Linux下C开发工具介绍 一 L ...

  6. 安卓linux交叉编译,Linux Ubuntu下用Android NDK 生成独立交叉编译链

    本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...

  7. 南工程c语言实验报告,Linux环境下-C语言编程实验报告(1)(总4页).doc

    Linux环境下-C语言编程实验报告(1)(总4页).doc 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称 Linux环境下 C语言编程 专业名称 网络工程班 级 1203班 学生姓名 ...

  8. Linux环境下——C语言聊天室项目

    由于使用了多线程操作,客户端进入程序后请先随便注册一次用户后再进行使用. 本程序默认第一个用户即ID为1的用户为超级管理员. 由于线程阻塞,最后的踢人操作有阻塞,需要在被踢出在线链表后手动下线. 看了 ...

  9. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

最新文章

  1. selenium2使用记录
  2. 选择 Python3.6 还是 Python 3.7
  3. 二叉树的遍历实现-1(三级)
  4. python返回变量类型_Python指定函数参数、返回值类型报错是咋了?
  5. 《娱乐至死》读书笔记(part4)--只有给观众他们想要的东西,你才可以得到市场占有率
  6. 扯淡!C语言怎么可能被淘汰呢?
  7. python给定一个整数n、判断n是否为素数_输入一个大于3的整数n,判断它是否为素数...
  8. 发现一个很nice的API调试工具
  9. SAP License:SAP系统的优点和功能
  10. JavaWeb — 解决请求前与请求后中文乱码的问题
  11. Tensorboard 安装及使用
  12. 登录页面业务逻辑实现
  13. Oracle 11g RAC OEM配置
  14. 2014 史丰收速算
  15. 一个人九月份开始考北邮的经验
  16. 使用AirCrack破解wifi密码(wpa/wpa2)
  17. Python学习 Day43 数据解析-BeautifulSoup 07
  18. mysql如何用jsp代码进行数据库备份_mysql如何用jsp代码进行数据库备份
  19. R语言散点图分类、配色、添加趋势线
  20. H5人脸实名认证-百度云版

热门文章

  1. 浅说万能头<bits/stdc++.h>
  2. 语音算法论文中frame-level,segment-level,utterance-level fearure
  3. 自定义注解以及通过aop实现注解横切(日志)
  4. 微信论坛交流小程序系统毕业设计毕设(8)毕业设计论文模板
  5. 网络游戏运营的整体流程
  6. 网站服务器宕机怎么办,服务器宕机了该怎么办?
  7. 《实用VC编程之玩转控件》第15课:Tree树形控件
  8. CV2逐步学习-1.imread()详解+cvtColor()颜色空间转换
  9. MySQL中单句实现无限层次父子关系查询
  10. 手把手教你使用CNN进行交通标志识别(已开源)