原网址:https://blog.csdn.net/ran337287/article/details/72794585
由于需要在linux上对C++进行调试,因此安装了CGDB。
【0】什么是CGDB?
“ CGDB is a curses (terminal-based) interface to the GNU Debugger (GDB). Its goal is to be lightweight and responsive; not encumbered with unnecessary features.”
“cgdb可以看作gdb的界面增强版,用来替代gdb的 gdb -tui。cgdb主要功能是在调试时进行代码的同步显示,这无疑增加了调试的方便性,提高了调试效率。界面类似vi,符合unix/Linux下开发人员习惯,所以如果熟悉gdb和vi,几乎可以立即使用cgdb。”
主要功能介绍:
1) 相比GDB,增加了语法加亮的代码窗口,显示在GDB窗口的上部,随GDB的调试位置代码同步显示。
2) 断点设置可视化 。
3) 在代码窗口中可使用GDB常用命令 。
4) 在代码窗口可进行代码查找,支持正则表达式 。
环境:ubuntu14.04
【1】安装
$ wget http://cgdb.me/files/cgdb-0.7.0.tar.gz
$ tar -zvxf cgdb-0.7.0.tar.gz
$ cd cgdb-0.7.0
$ ./configure –prefix=/usr/local
$ make && make install
安装时在我系统下出现了如下错误:
错误1:
configure: error: Please install flex before installing
解决:
sudo apt-get install flex
错误2:
configure: error: Please install makeinfo before installing
解决:
sudo apt-get install texinfo
如有其它错误可以参考下面这篇博客,看能不能帮忙解决
http://blog.csdn.net/analogous_love/article/details/53389070
【2】CGDB使用
启动cgdb
启动cgdb前,生成可执行程序
(使用opencv的情况)格式为:g++ -g -ggdb main.cpp xxx.cpp -o main.exe pkg-config --cflags --libs opencv
接着cgdb main.exe即可启动cgdb。
我事先生成了一个Bbox.exe, 所以是cgdb Bbox.exe
启动后的窗口长这样:
这里写图片描述
可以看到启动后,一共分出了三块窗口,分别是代码窗口,状态窗口,GDB窗口。下面介绍一些使用:
可以参考CGDB使用手册:
中文《CGDB中文使用手册》:https://leeyiw.gitbooks.io/cgdb-manual-in-chinese/content/index.html
英文原版《CGDB Manual》:http://cgdb.github.com/docs/cgdb.html
代码窗口:
显示被源代码,自动标记出程序运行到的位置。当焦点在代码窗口时,可以浏览代码、查找代码以及执行命令 ,操作方式同vi 。当您处于代码窗口时,您已经处于CGDB模式中。常用命令如下:
i : 切换到GDB窗口 。
o : 打开文件选择框,可选择要显示的代码文件 。
空格 : 设置/取消断点 。
k/ up arrow: 向上移动一列
j/down arrow: 向下移动一列
h/left arrow: 向左移动一列
l/right arrow: 向右移动一列
gg: 移动到文件顶部
G: 移动到文件底部
/: 查找
F5: 发送一个run命令至GDB
F6: 发送一个continue命令至GDB
F7: 发送一个finish命令至GDB
F8: 发送一个next命令至GDB
F10: 发送一个step命令至GDB
状态窗口:
显示当前打开的源文件名,当代码窗口进入命令状态时,显示输入的命令等信息
GDB窗口:
GDB的操作界面,同GDB ,
ESC: 切换到代码窗口 。
quit/q:退出cgdb
break [line_number]:(eg: break 61)在某一行设置断点(在61行设置断点)
n/next:next命令
r/run:run命令
c/continue:continue命令
k/kill:向GDB发送一个kill命令
print [variable]: 打印某个变量的值
set args []:设置参数
show args:显示参数
until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
until [line_number]: 运行至某行,不仅仅用来跳出循环
call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55)
【3】解决中文乱码
可参考:http://blog.liyiwei.cn/fix-linuxmint-cgdb-chinese-charactor/
打印变量时可能出现中文字符乱码,可以根据以下步骤解决这个问题
cd /lib/x86_64-linux-gnu
ls -al libncurse*
这里写图片描述
sudo rm -rf libncurses.so.5
sudo ln -s libncursesw.so.5.9 libncurses.so.5
试着打印中文字符变量,这时候就能正确显示了。
参考资料:
【1】http://blog.csdn.net/unix21/article/details/9986699
【2】http://blog.csdn.net/freesum/article/details/7300192
【3】https://leeyiw.gitbooks.io/cgdb-manual-in-chinese/content/index.html
【4】http://blog.liyiwei.cn/fix-linuxmint-cgdb-chinese-charactor/