cgdb关闭颜色代码显示[34m

本文讲述了作者在使用cgdb调试清华大学学堂在线课程实验时遇到的终端颜色代码问题,通过查找资料发现gdb配置文件.gdbinit的作用,并提供了详细的解决步骤,包括创建.no-color配置和调整启动命令。适合后续者快速定位和解决类似问题。
摘要由CSDN通过智能技术生成

问题描述

在学习学堂在线清华大学课程的时候,调试实验课中的ucore代码的时候,发现cgdb会在地址附近输出颜色代码,但是因为不知道为什么我的cgdb不支持显示终端颜色,因此会产生了不少困扰,在经过各方收集资料后终于找到了解决方法,故在此记录下以便后来人方便寻找答案

问题复现

环境

  1. ubuntu 20.04
  2. cgdb 0.6.7
leezed@leezed-Ubuntu:~$ cgdb --version
CGDB 0.6.7
Copyright 2002-2010 Bob Rossi and Mike Mueller.
CGDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for CGDB.
  1. gdb
leezed@leezed-Ubuntu:~$ gdb --version
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

问题截图
如图所示cgdb终端中出现了颜色代码
如图所示这边

问题解决思路

一开始我打开cgdb调试的时候我也是很蒙,虽然第一条指令的地址确实是0x0000fff0 但是为什么前面会出现[34m 这种奇怪的符号,我一开始以为是字符编码问题,然后我终端的字符编码切了几个有可能的也解决不了问题,在经过长时间的百度Google必应之后,发现前人就没有遇到这个问题,那只能自己动手解决了

经过搜索之后我大概明白了这个[34m [m 是终端中的颜色代码

在这里插入图片描述
然后经过百度发现明明我的版本支持颜色显示,但是还是输出颜色代码不显示颜色

这就很让人头痛了

然后我就想着算了吧,要不就用gdb调试吧,不用cgdb调试了,我就把启动指令换成了gdb就可以正常输出颜色

在这里插入图片描述
这是后我的脑子里突然蹦出来一思路

cgdb是基于gdb实现的,cgdb显示颜色代码的原因是gdb输出颜色,但是cgdb终端不支持颜色的原因(我也不知道我为啥非得用cgdb,可能主要就是一个探索精神吧),这时候我就想到我把gdb的颜色关了不就好了。

百度了下,找到了一个比较人性化的解决方法

解决方法

在/home下新建一个.gdbinit文件

这个文件是gdb终端打开时会先读取的配置文件

输入一下内容

# 终端不输出颜色
define nocolor
set style address foreground none
set style filename foreground none
set style function foreground none
set style variable foreground none
end

define 命令的意思就是将gdb终端中的 nocolor命令 绑定成下方 四条语句

下面四条语句就是关闭颜色显示的指令

然后在终端中输入nocolor 就可以关闭颜色显示了
在这里插入图片描述

这时候我们换成cgdb看一眼

在这里插入图片描述
可以看到确实没有了颜色代码。
但是我的强迫症表示,这个一开始的一段地址还是带着颜色代码的,令人不舒服,这是你可以在启动命令中加一个文件。

比如上图中你可以看到我是通过make debug启动的cgdb,那么我们来看下make debug 具体做了什么

在这里插入图片描述在make debug的时候,跟cgdb相关的语句就是这句

cgdb -q -x tools/gdbinit

-q的意思

-q, --quiet, --silent       Do not print version number on startup.#不打印版本信息

-x的意思

Initial commands and command files:

  --command=FILE, -x Execute GDB commands from FILE.   #从文件中执行gdb命令
  --init-command=FILE, -ix
                     Like -x but execute commands before loading inferior.
  --eval-command=COMMAND, -ex
                     Execute a single GDB command.
                     May be used multiple times and in conjunction
                     with --command.
  --init-eval-command=COMMAND, -iex
                     Like -ex but before loading inferior.
  --nh               Do not read ~/.gdbinit.
  --nx               Do not read any .gdbinit files in any directory.

也就是说gdb开始是会先运行~/.gdbinit的命令,然后在从 -x的文件中读取命令

那么很简单,我们就只要吧nocolor写入.gdbinit就可以不用手动输入nocolor并且最开始的地址也不会携带颜色代码了

tools/gdbinit文件内容如下

nocolor

# 以下是自定义的代码 Qemu调试代码
set architecture i8086
target remote :1234

当然你也可以将启动gdb命令写成

cgdb -q -ex nocolor -x tools/gdbinit

命令我就不解释了,自己终端输入 gdb --help就可以查看意思

解决问题
在这里插入图片描述

总结

该看文档就看文档,虽有有些文档写的确实很烂,但是阅读文档起码比起漫无目的的搜索更有用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值