CGDB是GDB的前端,地址是https://cgdb.github.io/,基于ncurse,可以让用户用图形化的方式去调试代码,非常方便。

虽然GDB的TUI模式也是图形化,但是很容易产生撕裂现象,需要redraw,用起来难受,而且没有语法高亮。

本文主要讲述CGDB一些常用的使用方法。


一 安装

本人使用的Linux系统是Debian10 64位,Ubuntu也差不多。

去官网下载Stable版本,或者去其github地址下载release版本,本文写作时当前Stable版本为0.7.1

下载下来后解压,cd到源码目录,然后执行下面命令

sudo apt install automake
sudo apt install ncurses-devel
sudo apt install flex
sudo apt install texinfo
sudo apt install libreadline-dev

然后执行configure,

./configure

如果缺少依赖库,configure命令会在最后进行提示,可以根据提示自行安装。
configure没有问题之后,执行编译和安装,

make
sudo make install

如果是从Github上下载下来的,解压后要先执行autogen.sh去生成configure文件,后面都是一样操作了,具体可以参阅源码里的Readme.md文件


二 使用

首先准备一个代码工程,如下,

main.c内容如下,

#include <stdio.h>#include "func.h"int main(void)
{int aa = 100;int bb = 200;int cc = func(aa+bb);printf("cc: %d\n", cc);return 0;
}

func.h内容如下,

#ifndef FUNC_H_
#define FUNC_H_int func(int data);#endif

func.c内容如下,

int func(int data)
{int newData = data+500;return newData;
}

CMakeLists.txt内容如下,

cmake_minimum_required (VERSION 3.5)
project (demo)
add_executable(main src/main.c src/func.c)

然后cd到build目录下,执行下列语句生成debug版本的程序,

cmake -DCMAKE_BUILD_TYPE=Debug .. && make

然后在build目录下执行cgdb,

cgdb main      #如果有参数,则是 cgdb --args main xx,与gdb一样

出现如下窗口,

中间一道分割条,分割条中显式当前打开的文件名。
分割条上面是Source窗口,按Esc键进入Source窗口;分割条下面是GDB窗口,按“i”进入GDB窗口。

在Source窗口中,可以按上下键逐行查看,或者page up/down翻页查看,当前光标所在行会有一个block进行提示,

调整这2个窗口的占比,首先按下esc,然后使用“+”和“-”来调整。

常规用法

进入GDB窗口后,所有指令都是和gdb一样的,输入b main在main函数设置断点,然后输入r回车,开始运行,gdb相关的调试指令参考这篇文章,不再赘述

假如我们想打开func.c,然后在里面设置个断点,该怎样做呢?首先按Esc进入Source窗口,然后按o打开源码列表,此时出现的窗口叫文件浏览窗口,

按上下键选择需要的文件,如果文件太多,按/,然后输入文件名来查找。找到文件后,回车打开,

例如想在第5行打个断点,先将光标移动到第5行,然后按空格,断点就会打上,再按一次空格就会删除这个断点;或者按i进入GDB窗口,然后输入b 5回车,

第5行就会变成红色,表示断点已经打上了。如果源文件里代码,需要进行查找,先按Esc进入Source窗口,然后输入/,最后输入关键字就可以查找和定位了,还可以按n进行查找下一个,按N查找上一个。

按Esc回到Souece窗口,按o打开文件列表,然后打开main.c回到开始的地方,输入‘c’运行,就可以运行到func()里的断点位置了,执行到的当前位置使用一个长箭头进行指示。

PS:程序执行的位置和光标指示的位置2者意思是不一样的。


三 配置cgdb

cgdb使用一个叫cgdbrc的文件来进行配置,cgdb启动时会去读取这个文件,这样就可以把我们喜欢的配置保存到这个文件里。

例如Source窗口中的光标提示默认是一个block,我们想改成highlight,即点亮一整行,那么就可以在cgdbrc里输入下面的语句,

set selectedlinedisplay=highlight

首先使用vim打开这个文件,如果这个文件不存在就会自动创建,

vim ~/.cgdb/cgdbrc

然后把上面那句话写入到打开的cgdbrc里,接着source一下,

source ~/.cgdb/cgdbrc

然后使用cgdb去调试main,可以看到已经变成我们想要的了。

其它配置参数可以参考cgdb文档第4节CGDB configuration commands。


四 常用快捷键

进入Source窗口后可以使用以下快捷键进行debug,

其它可以参考cgdb文件第3.1节 Commands available during CGDB mode

Linux下CGDB使用教程(转载)相关推荐

  1. mysql linux 安装_mysql-5.7.28 在Linux下的安装教程图解

    2.上传tar包到服务器到 /usr/local/src 3.卸载系统自动的Mariadb rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5. ...

  2. Linux 下 GitLab 安装教程

    Linux 下 GitLab 安装教程 安装 Linux 下载 GitLab 安装 GitLab 登录 GitLab GitLab 汉化 GitLab 设置密钥 卸载 GitLab 为了便于以后使用, ...

  3. Linux 下 Redis 安装教程

    Linux 下 Redis 安装教程 事先准备 下载 Redis 安装 Redis 设置 Redis 开机自启动 远程访问 Redis RDM 远程访问 Redis 笔者的运行环境: CentOS S ...

  4. Linux下安装MATLAB教程

    Linux下安装MATLAB教程 前言 由于之前ubuntu下分区总共只分了100个G,所以造成目前没有/home下没有空间,因此决定安装在windows磁盘下,然后再ubuntu下访问使用.因此将此 ...

  5. linux系统nginx安装教程,Linux下Nginx安装教程

    Linux下Nginx安装教程分享,具体内容如下 1.安装编译文件及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl op ...

  6. linux下conda使用教程

    linux下conda使用教程 管理conda 1.验证conda是否已经安装并在系统上运行 2.将conda更新到当前版本 管理环境 1.创建环境并在其中安装一个包 2.激活环境 3.查看所有环境 ...

  7. Linux下安装nginx教程

    Linux下安装nginx教程 安装依赖包 #执行一下命令 安装4个依赖包 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl- ...

  8. Linux下安装zookeeper教程

    Linux下安装zookeeper教程 Zookeeper简介 1.Zookeeper应用场景 Zookeeper单机版安装 1.获取安装包 1.使用wget命令获取 2.从官网下载 2.安装步骤 3 ...

  9. linux 编译汇编,linux下的汇编教程

    linux下的汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初 ...

  10. linux下scrapy安装教程,linux centos7安装scrapy

    linux centos7安装scrapy 时间:2018-01-02 17:41作者:scrapy中文网阅读: 本scrapy中文教程主要介绍,centos7 linux下scrapy的安装,pyt ...

最新文章

  1. EEMD算法的基本原理
  2. java pkcs#11读取证书加解密(初学-分享)
  3. AlphaGo:人工智能与深度学习
  4. 文件夹没有安全选项-文件上传下载-路径访问被拒绝
  5. 【BO】WEBI文件打开时提示Illegal access错误
  6. 657. 机器人能否返回原点
  7. Thanos 简介和实践
  8. python docx 替换文字_查找并替换.docx文件中的文本 - Python
  9. 基于用户的协同过滤推荐算法
  10. vue-resource HTTP API基础
  11. anaconda 清华镜像及对应下载
  12. Hadoop I/O
  13. 网页设计的常用字体规范
  14. Mac入门(四)写给Mac新人
  15. aws linux vps使用教程,亚马逊云(AWS)注册账号和启动服务器EC2(centos镜像)教程(踩坑记)...
  16. c++教你唱响天空之城(源码奉上)
  17. 副业真没想你的这么容易做!
  18. 瑞幸的野望,小鹿茶的突袭
  19. Single shot object detection SSD using MobileNet and OpenCV
  20. 邮件营销 | 精准投放,独立站可提升6倍转化率

热门文章

  1. Asp.Net中的正则表达式问题可以在此提问,今后大家一起研究!贴出基本语法参考...
  2. SpringCloud组件:Eureka服务注册是采用主机名还是IP地址?
  3. 去除Win10快捷图标小箭头
  4. Spire.Doc 教程:在C#,VB.NET创建、编辑和保存Word
  5. Software caused connection abort: socket write error 问题原因推测
  6. ucOS学习--基础知识
  7. C#实现SQL SERVER2008聚合函数
  8. 看斯皮尔伯格大爷,看政治与奥运
  9. [Bochs]Bochs调试技术
  10. JSP 内置对象request常见用法