分享
 
 
 

使用gdb调试程序

王朝other·作者佚名  2007-01-18
窄屏简体版  字體: |||超大  

一、调试方法:

首先, gdb到代码的出错处;

然后, bt(backtrace)看函数堆栈, 确定问题出在那条语句。

p(print) 打印变量的值,找原因

up 进入上一层堆栈, 追溯问题出在哪里。

二、 gdb 命令集

关于断点的命令:

awatch:

awatch用来为一个表达式设置观察点,在表达式的值发生改变时,或者当表达式的值被读取的时候,程序停止执行。

break:

用于在程序中设置断点 break + 要设置断点的行号

clear:

用于清除断点 clear + 要清除断点的行号

commands:

用于为遇到断点之后执行特定的指令而设置的 command + 断点号

如果commands 之后没有断点号,gdb会将最后一个设置的断点编号作为默认值。

condition:

在满足一定的条件时才在指定的行上设置断点 condition 断点编号 条件表达式

delete:

用于清除断点和自动显示的表达式的命令。与clear的不同之处:clear要给出断点的行号,delete要给出断点的编号。用clear命令清除断点时gdb会给出提示,而用delete清除断点时gdb不会给出任何提示

disable:

让所设断点暂时失效。如果要让多个编号处的断点失效可将编号之间用空格隔开

enable:

与disable 相对

ignore:

这条命令在一定范围内忽略用户设定的断点 ignore N CONT

tbreak:

用于设置临时断点,所谓临时断点就是断点只在设置之后起作用一次。

watch:

与awatch类似

关于数据的命令:

display:

该命令用于显示表达式的值,使用了该命令后,每当程序运行到断点处都会显示表达式的值。 display 表达式 如:display 5*j

info display:

用于显示当前所有要显示值的表达式的有关情况

delete display:

用于删除一个要显示值的表达式,调用这个命令删除一个表达式后,被删除的表达式将不被显示。 delete display 1

disable display:

使一个要显示的表达式暂时无效。可有enable重新使之有效

enable display:

反操作disable diplay

undisplay:

用于结束某个表达式值的显示。同delete display功能相似

whatis:

显示某个表达式的数据类型 如:whatis j

print:

用于打印表达式的值。可以打印内存中从某个变量开始的一段区域的内容。$表示给定序号的前一个序号,$$表示给定序号的向前第2个序号。例如给定序号是5,那么$代表4,$$代表3.如果是print $表示 print 1

print还可用于对变量赋值如print j=8;

print打印内存中从某个部分开始的一块连续空间的内容。如print 开始表达式@要打印的连续空间的大小

ptype:

用于给出类型的定义。疑问ptype与whatis的区别?

set:

set variable 用于为变量赋值 类似print set variable j=9 print j=9

关于文件的命令

add-shared-symbol-files:

该命令用于从动态的连接映射的共享目标文件中装入符号表。

add-symbol-file:

该命令用于从已经动态装入的文件中装入负号表。使用格式是:add-symbol-file FILE ADDR其中FILE给出的是动态装入的文件的名称,ADDR是文件中正文的起始地址。

cd:

改变当前工作目录。

core-file:

使某个文件成为core dump

directory:

用来向源文件搜索目录中添加一个目录

file:

用来装入待调试程序的命令。

list:

list的非空系数的几种形式:

LINENUM:当前文件的LINENUM行

FILE:LINENUM: 指定文件的LINENUM行

FUNCTION:当前文件的FUNCTION函数

FILE:FUNCTION

*ADDRESS列出包含该地址的文件

list 起始行号 截止行号

forward:

用来从列表当前行开始向后查找第一个匹配某个字符串的程序行 forward 匹配的字符串

load:

该命令用于动态的向正在调试的程序中装入文件,并记录它的符号表,准备联接

path:

该命令用于向目标文件的搜索路径中增加目录的,可以使用当前目录的$cwd

pwd:

显示当前工作路径

reverse-search:

从列表当前行开始向前查找第一个匹配的字符串,查找到的行号保存在$_中

search:

同forward

关于程序运行的命令:

cont:

使程序继续执行

handle:

对信号设置处理函数。如:handle 信号 信号处理

信号可以是符号,也可以是数字。如果用all来作参数,则意味着调试器接受除了(信号SIGTRAP和信号SIGINT)之外的所有信号

处理函数:

stop:如果信号发生重新进入调试器,并打印出提示信息;

print:如果信号发生就打印一条提示信息

pass:让程序能看到这个信号发生

jump:

指定程序开始调试的指令和地址 jump 行号或是指令地址

kill:

结束当前程序的调试。

next:

继续程序的运行,越过子程序调用

nexti:

用于单步执行一条语句中的一条指令,它会跟踪到子程序的内部,next用于单步执行一条语句,而nexti用于单步执行一条指令,一条语句可能有几条指令构成。

step:

用于执行一条语句的,也不越过子过程的调用

stepi:

用于执行一条指令的,它不越过子程序的调用,而是跟踪到子过程的内部

关于堆栈的命令:

backtrace:

用来打印栈侦指针的。backtrace 要打印的栈侦指针的个数

frame:

该命令用于打印栈侦的。frame 要打印的编号

select-frame:

指定要选择的栈侦的编号。一般与info frame连用。

info reg:查看寄存器使用情况。

info stack:查看栈。

where:查看当前位置。

up:跳到上一层函数。

down:与up相对。

attach <进程号>:把当前高度的程序粘在某个进程上,用于调试运行中的进程。

ptype <变量or数据类型>:查看变量或数据类型的定义。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有