用gdb调试代码


title: 用gdb调试代码
tags:

  • gdb
    date: 2017-08-09 15:09:22

gdb调试

$ gdb execfile

开始调试execfile;

list

list,简写为l,显示源文件;命令格式:

list | l [arg1,arg2]

arg1为起始行号,arg2为结束行号;显示arg1行到arg2行之间的代码;

未设置arg1和arg2 时,默认显示10行;

(gdb) l
#显示1-10行代码
break

break,简写b,设置断点;命令格式:

break | b  location

location可以是function(函数名) | linenum(行号) | address(偏移地址);

(gdb) b _start
(gdb) b *_start + 4
(gdb) b 14
run、stepi、info
run

run,简写r,运行程序;

stepi

stepi,简写si,执行一条指令;命令格式:

stepi | si [N]

N意味着执行N条指令(或者到程序结束处);

(gdb) si
# 执行一条指令
(gdb) si 4
# 执行四条指令
info

info,简写i,显示一些调试信息;

info registers -- List of integer registers and their contents
#可以简写为 i r
info breakpoints -- Status of specified breakpoints (all user-settable breakpoints if no argument)
#简写 i b
print

print,简写pExamining Data,打印寄存器中的值或打印变量中的值;命令格式:

print | p [/fmt] $registers | variable

registers表示寄存器,如eax,ebx,ecx,edx,esi, edi, esp, ebp, eflags等;
fmt参数如下表:

format letter description
o octal
x hex
d decimal
u unsigned decimal
t binary
f float
a address
i instruction
c char
s string
z hex,zero padded on the left
(gdb) p $eax
#打印寄存器eax中的值
(gdb) p Snippet
#打印Snippet中的值
examine

x,全称:examine;Examining Memory,打印内存单元中的值;命令格式:

x/nfu address

address表示内存单元地址;
n是一个整数,表示显示几个内存单元;默认是1;
f表示格式化,见上表;默认是x;
u表示内存单元大小,见下表:

unit letter description
b Bytes
h HalfWords(two bytes)
w Words(four bytes, default)
g Giant words(eight bytes)
(gdb) x/5cb &Snippet
#从Snippet所在的地址开始打印连续的5个以字节为单位的内存单元,并以字符的形式显示;
(gdb) x/5cb 0x6000c8;
#从地址为0x6000c8的内存单元开始打印;
display

displayAutomatic Display,自动显示,每次运行完一条指令自动打印显示列表中的值;命令格式:

display[/fmt] expr | address

display会根据设置的fmt,expr或者address自动判断是调用x还是print

(gdb) display/5xb &Snippet
#等价于每次执行完一条指令后,自动执行一次x/5xb &Snippet;
(gdb) display/x $ebx
#相当于每次执行一条指令后,自动执行一次p/x $ebx;
quit

quit,简写q,退出gdb;

shell

需要在gdb中执行shell命令时,可以使用shell;命令格式:

shell command

TUI模式

gdb提供TUI(Text User Interface)模式,方便调试代码;

进入TUI模式

利用gdb -tui execfile命令进入gdb,可以开启TUI模式;
进入gdb之后通过快捷键ctrl+x a或者使用命令tui enable开启TUI模式;

layout

可以利用layout命令调整TUI中的布局;通过help layout可以查看帮助;命令格式:

layout next | prev | layoutname

next下一个布局,prev上一个布局,layoutname见下表:

layoutname description
src 源码布局
asm 汇编布局
split 源码,汇编,cmd布局
regs 寄存器布局
winheight

调整布局的大小,命令格式:

winheight winname [+ | -] lines

winname见下表:

winname description
src 源码窗口
asm 汇编窗口
cmd 命令窗口
regs 寄存器窗口

+表示窗口winname增大lines行,-表示窗口winname减小lines行;

focus

利用focus可以让焦点关注不同的窗口;命令格式:

focus next | prev | winname

next下一个窗口,prev上一个窗口,winname见上表;
当cmd不被focus时,在cmd中方向键不起作用,若要使用方向键,此时方向键命令同emacs一样(ctrl+p向上,ctrl+n向下,ctrl+f向右,ctrl+b向左);

refresh

refresh刷新窗口;

关闭TUI模式

ctrl+x a既可以开启TUI,也可以关闭TUI;
tui disable关闭TUI模式;

参考:
Debugging with GDB
Quick GDB Information

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,479评论 0 26
  • 作者: liigo原文链接: http://blog.csdn.net/liigo/archive/2006/01...
    wuqingyi阅读 1,811评论 0 4
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,016评论 9 467
  • 概述 GDB是一个由GNU开源组织发布的、UNIX/Linux操作系统下的、基于命令行的、功能强大的程序调试工具。...
    咕咕鷄阅读 20,610评论 0 8
  • 如果你不想要,想退出要趁早 ——如果你有想到我们有未来的话,绝不会有合不合适这一说了 是草草的树洞: 半个月前掰的...
    豆花妹妹呀阅读 647评论 0 8