当前位置: 首页 > 汇编 > 正文

汇编学习(十四)X86汇编学习 (1)GDB CGDB

我们首先来学习下几个我们接下来学习的几个重要的工具

gdb:

UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

一个小例子:

 

我们以这个例子来复习小结下GDB 的使用

首先编译:

我的编译以及调试环境:

2016-06-04 20:36:35 的屏幕截图

开始编译:

 

几个简单命令:

start           : 开始单步调试

break         : 断点设置

info break          : 断点信息

run            :运行调试程序

step           : 单步执行程序,不会直接执行函数

next           : 单步执行函数

backtrace/bt  :  显示函数调用栈帧

continue/c   :   继续执行调试程序

display      :   显示表达式的结果,表达式由程序中的变量组成。

info   files  :  显示被调试文件的信息

info   func :  显示被调用的程序的所有函数信息

info   prog :  显示被调用程序的执行状态

info   var  :   显示被调试程序的所有全局和静态变量

kill           :   结束被调试程序的程序

list           :   显示被调用程序的源代码

quit         :    退出GDB

where      :    程序出错的地方

layout    显示调试模式:

layout src :进入调试模式,就像这样:

2016-06-04 21:06:28 的屏幕截图

info win :显示大小

layout next:切换下一个布局模式

layout  src/asm/split :显示源代码/汇编代码/一起显示

layout  regs   :增加寄存器显示

focus cmd /src/asm/regs/next/prev :  切换当前窗口

refresh  : 刷新当前窗口

tui  reg next :显示下一组寄存器

tui reg  system: 显示系统寄存器

update           : 更新源代码窗口和当前执行点

winheight name +/- line :调整高度

建议先在传统模式下使用start 开始调试再进入layout 模式

marco : 查看宏定义  需要加- g3参数

set print pretty  :  打印结构体

gdb -p  <pid> :  调试进程号

shell 命令行:执行shell命令行
set args 参数:指定运行时的参数
show args:查看设置好的参数
info program: 来查看程序的是否在运行,进程号,被暂停的原因。 // 打印寄存器数组, info reg,  简写 i reg
clear 行号n:清除第n行的断点
delete 断点号n:删除第n个断点
disable 断点号n:暂停第n个断点
enable 断点号n:开启第n个断点

cgdb:

cgdb 是gdb 的终端界面增强版本。看到了吗?这个是彩色的。

2016-06-04 22:18:56 的屏幕截图

cgdb分为上下两栏,上面类似于vi窗口(就称之为vi窗口吧)显示对应的代码,下面gdb窗口进行调试操作,上下窗口连动,也就是说vi窗口里显示的代码会跟随gdb窗口里调试的位置同步进退。

按esc键可让输入焦点进入到vi窗口,再按i键回到gdb窗口。按其它键也可以进入到vi窗口,比如小键盘上的按键(如果此时Num Lock处于打开状态)。

vi窗口可进行的操作包括,上下左右翻动,按冒号(:)开始进行设置(具体设置命令可以参考这里),比如设置上面窗口全屏显示(即下面的gdb窗口被隐藏),按斜干(/)为在当前文件内搜索,按o键可以显示当前程序关联的文件列表,按空格则在当前位置设置/取消断点

ESC:切换焦点到源码模式,在该界面中可以使用vi的常用命令

i:切换焦点到gdb模式

o:打开文件对话框,选择要显示的代码文件,按ESC取消

空格:在当前行设置一个断点

 

本文固定链接: http://zmrlinux.com/2016/06/04/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e5%8d%81%e5%9b%9b%ef%bc%89x86%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0-1/ | Kernel & Me

该日志由 root 于2016年06月04日发表在 汇编 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 汇编学习(十四)X86汇编学习 (1)GDB CGDB | Kernel & Me