Linux下CGDB使用教程(转载)
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使用教程(转载)相关推荐
- mysql linux 安装_mysql-5.7.28 在Linux下的安装教程图解
2.上传tar包到服务器到 /usr/local/src 3.卸载系统自动的Mariadb rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5. ...
- Linux 下 GitLab 安装教程
Linux 下 GitLab 安装教程 安装 Linux 下载 GitLab 安装 GitLab 登录 GitLab GitLab 汉化 GitLab 设置密钥 卸载 GitLab 为了便于以后使用, ...
- Linux 下 Redis 安装教程
Linux 下 Redis 安装教程 事先准备 下载 Redis 安装 Redis 设置 Redis 开机自启动 远程访问 Redis RDM 远程访问 Redis 笔者的运行环境: CentOS S ...
- Linux下安装MATLAB教程
Linux下安装MATLAB教程 前言 由于之前ubuntu下分区总共只分了100个G,所以造成目前没有/home下没有空间,因此决定安装在windows磁盘下,然后再ubuntu下访问使用.因此将此 ...
- linux系统nginx安装教程,Linux下Nginx安装教程
Linux下Nginx安装教程分享,具体内容如下 1.安装编译文件及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl op ...
- linux下conda使用教程
linux下conda使用教程 管理conda 1.验证conda是否已经安装并在系统上运行 2.将conda更新到当前版本 管理环境 1.创建环境并在其中安装一个包 2.激活环境 3.查看所有环境 ...
- Linux下安装nginx教程
Linux下安装nginx教程 安装依赖包 #执行一下命令 安装4个依赖包 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl- ...
- Linux下安装zookeeper教程
Linux下安装zookeeper教程 Zookeeper简介 1.Zookeeper应用场景 Zookeeper单机版安装 1.获取安装包 1.使用wget命令获取 2.从官网下载 2.安装步骤 3 ...
- linux 编译汇编,linux下的汇编教程
linux下的汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初 ...
- linux下scrapy安装教程,linux centos7安装scrapy
linux centos7安装scrapy 时间:2018-01-02 17:41作者:scrapy中文网阅读: 本scrapy中文教程主要介绍,centos7 linux下scrapy的安装,pyt ...
最新文章
- EEMD算法的基本原理
- java pkcs#11读取证书加解密(初学-分享)
- AlphaGo:人工智能与深度学习
- 文件夹没有安全选项-文件上传下载-路径访问被拒绝
- 【BO】WEBI文件打开时提示Illegal access错误
- 657. 机器人能否返回原点
- Thanos 简介和实践
- python docx 替换文字_查找并替换.docx文件中的文本 - Python
- 基于用户的协同过滤推荐算法
- vue-resource HTTP API基础
- anaconda 清华镜像及对应下载
- Hadoop I/O
- 网页设计的常用字体规范
- Mac入门(四)写给Mac新人
- aws linux vps使用教程,亚马逊云(AWS)注册账号和启动服务器EC2(centos镜像)教程(踩坑记)...
- c++教你唱响天空之城(源码奉上)
- 副业真没想你的这么容易做!
- 瑞幸的野望,小鹿茶的突袭
- Single shot object detection SSD using MobileNet and OpenCV
- 邮件营销 | 精准投放,独立站可提升6倍转化率
热门文章
- Asp.Net中的正则表达式问题可以在此提问,今后大家一起研究!贴出基本语法参考...
- SpringCloud组件:Eureka服务注册是采用主机名还是IP地址?
- 去除Win10快捷图标小箭头
- Spire.Doc 教程:在C#,VB.NET创建、编辑和保存Word
- Software caused connection abort: socket write error 问题原因推测
- ucOS学习--基础知识
- C#实现SQL SERVER2008聚合函数
- 看斯皮尔伯格大爷,看政治与奥运
- [Bochs]Bochs调试技术
- JSP 内置对象request常见用法