1. 安装 gdb-dashboard

gdb-dashboard 开源项目地址:https://github.com/cyrus-and/gdb-dashboard

项目完全是使用Python脚本编写,可以直接下载脚本到工程目录

wget -P ~ https://git.io/.gdbinit

.gdbinit 文件在Linux系统下是隐藏文件,如果查看要使用命令ls -al

当在当前目录下执行gdb或者是aarch64-none-elf-gdb命令时,gdb工具会自动查找当前目录下是否有 .gdbinit 文件,如果找到相应的文件,会自动去执行相关的脚本内容

我们只需要把上面的调试脚本下载到工程根目录就可以使用了

2. 使用与配置

gdb-dashboard 脚本提供了一些配置选项,可以添加一些自定义的配置

2.1. 配置脚本

gdb-dashboard 会从下面几个目录查找配置文件并执行相关配置完成一些初始化的工作:

/etc/gdb-dashboard/;
$XDG_CONFIG_HOME/gdb-dashboard/ (defaulting to ~/.config/gdb-dashboard/);
~/Library/Preferences/gdb-dashboard/;
~/.gdbinit.d/.

在dashboard启动时会去加载和执行上面目录存放的一些初始化配置文件,一般建议在~/.gdbinit.d/目录下添加我们自己的配置

~/.gdbinit.d/ 目录创建一个配置文件 ~/.gdbinit.d/init

mkdir ~/.gdbinit.d/
touch ~/.gdbinit.d/init

在配置文件中加入如下内容(后续可根据自己的需要去定义跟多配置):

set breakpoint pending on
set confirm off

2.2. 定义显示的模块或者组件

比如默认显示的模块太多、屏幕放不下了,有个别模块我们目前用不到,可以通过修改配置关闭一些模块的显示

dashboard 目前支持的全部组件如下:

assembly breakpoints expressions history memory registers source stack threads variables

我们可以在配置文件中定义启动后显示的组件

使用-layout指令来定义需要显示的内容和隐藏的内容

比如我们只显示 register , assembly, stack

dashboard -layout registers assembly source !variables stack

这个定义顺序也表示模组的展示顺序,从上到下

!叹号表示默认不显示该模组,当我们输入命令 dashboart variables命令时候,可以在对应的位置插入显示

2.3. 使用多个终端显示

除了设置某些组件不显示之外,我们还可以设置让某个组件在其他终端显示输出

整个gdb-dashboard的显示内容或者是单个模块组件的显示内容都可可以单独独立的在不同的终端输出显示

比如我们打开了2个终端 可以将源码组件在A终端输出显示,其他的组件在B终端显示

使用-output 命令用来将输出内容重定向到其他的界面或设备,可以实现上面的目标

重定向全部输出到 /dev/pts/1

dashboard -output /dev/pts/1

重定向 assembly 组件到 /det/pts/3

dashboard assembly -output /dev/pts/1

重定向 source组件输出到 /dev/pts/3

dashboard source -output /dev/pts/2

/dev/pts/x 表示一个终端界面,如何获取我们的某个终端的序号是什么呢?

在终端输入tty命令就可以查看当前终端的序号

jhb@jhb-pc:~/rtos/armv8_os$ tty
/dev/pts/2

2.4. 显示高度设置

将组件重定向到其他窗口以后,可以使用下面的命令使得组件全屏显示

dashboard assembly -style height 0
dashboard source -style height 0

效果如下:

3. 使用 gdb-dashboard 调试

3.1. 开始调试

进入到工程目录

cd armv8_os

下载gdb init 调试脚本

wget -P ~ https://git.io/.gdbinit

启动gdb 服务

make qemu_gdb

新建一个窗口 打开gdb调试器

aarch64-none-elf-gdb

连接到gdb服务

target remote localhost:1234

连接完成以后就可以看到dashboard界面,默认显示了全部组件,需要拖动滚动条才能看到上面的内容

加载程序文件
file app
load

3.2. GDB常用调试命令

设置断点给某个函数

break func

执行单个指令

si

全速运行

continue

3.3. dashboard 常用命令

3.3.1. 查看内存区域

//把memory重定向到一个新的窗口
dashboard memory -output /dev/pts/2
​
//查看地址 0x40000000 长度为0x1000 看上去现在只能显示单个字节,可以研究下不同的显示格式 提交一下代码给作者
dashboard memory watch 0x40000000 0x1000

3.3.2. 查看变量

dashboard expressions -output /dev/pts/2
​
dashboard expressions watch g_systic

添加变量时候还可以自动补全(非常强大)

gdb-dashboard工具,完全可以由程序员自己去定制调试界面的内容,定制调试命令等等

可视化调试工具gdb-dashboard相关推荐

  1. 一款C++ 可视化调试工具增强插件

    一款使C++的可视化调试工具支持Boost, wxWidgets, TinyXML, TinyXML2库的插件,如果你用到了这些库,这个就是一个不可多得的好工具. 下载地址:C++ Debugger ...

  2. C实战:强大的程序调试工具GDB

    C实战:强大的程序调试工具GDB 1.基本调试 这里只列举最最常用的GDB命令. 1.1 启动GDB gdb program:准备调试程序.也可以直接进入gdb,再通过file命令加载. 1.2 添加 ...

  3. 两种MQTT协议可视化调试工具

    两种MQTT协议可视化调试工具 一.MQTT技术背景 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一个基于客户端-服务器的消息发布/订阅 ...

  4. 性能工具之调试工具 GDB(你以为性能分析中用不到吗?)

    文章目录 一.前言 二.环境依赖 三.Helloword 示例 四.调试 Redis 示例 1.下载 Redis 源码并解压 2.确认编译选项 3.检查编译 4.GDB 调用 redis-server ...

  5. vs2015如何调试c语言,Visual C++ 2015 中的可视化调试工具

    Visual C++ 2015 中的可视化调试工具 11/29/2015 8 分钟可看完 本文内容 [原文发表时间] 2015/09/28 10:27 PM 当调试本地应用程序时,通常查看内存中具体对 ...

  6. K8s Helm 可视化工具 - Helm Dashboard

    Helm-Dashboard 是 ValidKube 之后 Komodor 的第二个开源项目,Komodor 的愿景是通过构建有助于理解分布式云原生系统引入的复杂性的工具,使Kubernetes的操作 ...

  7. [菜鸟SpringCloud实战入门]第五章:熔断器Hystrix的使用 + 可视化监控Hystrix Dashboard和Turbine

    前言 欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud. 本系列适合有一定Java以及Sp ...

  8. 15 服务容错可视化解决方案HyStrix Dashboard

    1.基于HyStrix Dashboard实现容错可视化 基于Spring Cloud Hystrix实现微服务容错时,通过集成HyStrix Dashboard组件,可以实现微服务容错的可视化. 2 ...

  9. android gdb 远程调试工具,gdb输入/输出错误远程调试到Android

    我试图调试一个调用本地代码来执行一些GL渲染的android应用程序.本机代码是我试图移植的现有代码(并且我不太清楚).我已经有了正确编译,链接和正确安装的代码,并且我有一些原生函数调用了从我的Jav ...

最新文章

  1. oracle 跑旧的文件,移动datafile以后,旧的datafile是否还被Oracle使用
  2. 独家 | NLP详细教程:手把手教你用ELMo模型提取文本特征(附代码论文)
  3. Microsoft Expression Blend 2 密钥,key
  4. 抓信插件开发遇到网页的CSS不起作用
  5. 艾伟_转载:ASP.NET模板引擎技术
  6. NetBeans 6.7.1、6.8界面美化
  7. ubuntu18.10 cosmic更换阿里云的源
  8. 译注(3): NULL-计算机科学上最糟糕的失误
  9. 2021牛客暑期多校训练营1
  10. 模拟实现priority_queue优先级队列
  11. java中的starts_Java Math类静态double nextAfter(double starts,double direction)示例
  12. Python常用模块集锦
  13. iCloud5_Building and Running Your App
  14. centos7 安装教程
  15. 数据库之SQL(该列没有包含在聚合函数或 GROUP BY 子句中)
  16. C++norm函数的用法
  17. 智方8000系医疗器械销售管理系统 免费
  18. MDK KEIL 下载算法程序 外部存储QSPI FLASH
  19. cgcs2000大地坐标系地图_我国大地坐标系_地图与地图制图
  20. 2019年最值得学习的编程语言TOP5

热门文章

  1. python学习day3
  2. iframe 有那些缺
  3. 自定义Counter使用
  4. (转)Sublime Text2 快捷键汇总
  5. java Apache Commons jar包简介
  6. Twisted入门教程(3)
  7. JavaScript中变量的相互引用
  8. CV05-ResNet笔记
  9. arraylist 后往前遍历_面试官:谈谈常用的Arraylist和Linkedlist的区别
  10. 粒子耗尽 粒子滤波_如何使用粒子的强大蓝牙API