您的位置:首页 > 运维架构 > Linux

Linux下用gdb调试程序

2018-03-04 19:30 309 查看

简单了解gdb

        gdb是UNIX及UNIX-like下用于调试程序的调试工具,它的功能非常强大,在Windows下调试多了的程序员会对gdb这样的调试工具感觉非常的不熟悉,但是在Unix下,它应该是最好的调试工具了。

gdb主要功能

启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
当程序被停住时,可以检查此时你的程序中所发生的事。
你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

gdb下的主要的几个命令

kill
命令解释例子
r/run运行当前调试程序
如果遇到断点就在断点处停下,没有断点则直接跑完程序

(gdb) r test
l/list
列出源代码,从上次列出的位置接着往下列
list + 行号  以该行号为中心显示
list +行号,行号,显示两个行号之间的代码
list +其他文件:行数,显示另一文件的某一行
(gdb) l
(gdb) l 10
(gdb) l 10,15
(gdb) l test.h:1

file加载被调试的可执行程序文件(gdb) file test
c/continue继续程序的执行,直至下一个断点或程序结束(gdb) c
b 行号
b 函数名称
b *地址
b 行号 +条件

d 编号

给第几行标注断点
给某个函数开始处标注断点
给某个地址标注断点,用于没有源文件时
条件断点,如果条件成立给某行标注断点

给断点标号
(gdb) b 6
(gdb) b main
(gdb) b *0xffffffff
(gdb) b 8 if a==8

(gdb) d

s,n
si,ni

s:执行一行源程序代码,若该代码有函数则进入该函数(逐语句)
n:执行一行源程序代码,若该行代码有函数调用一并执行,不进入函数(逐过程)
si和ni相当于汇编语言下的s和n

(gdb) s
(gdb) n

p/F 变量名显示指定变量的值,可以是临时变量或者是全局变量。F是打印的格式
x-16进制,d-有符号十进制,u-无符号十进制,f-浮点格式

(gdb) p/x i
display ...
undisplay 编号

display,用于显示表达式的值,每当程序运行到断点处都会显示表达式的值

undisplay + display 编号  用于结束某个表达式值的显示

(gdb) display a
(gdb) undisplay 3

i/info用于显示各类信息,具体的可以用help i来查看,下面有讲到一些(gdb) i r
watch当运行run后,你想知道哪些值在运行中被改变了(gdb)
watch expresstion
终止正在调试的程序(gdb)kill
shell执行shell命令(gdb)shell ls
until 行数运行到函数某一行(gdb)until 3
finish运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值以及参数信息(gdb)finish

常用的info用法

info+参数用法
info break查看断点信息
info args查看当前函数的参数
info stack查看调用堆栈
info source查看当前源文件信息
info display查看所有要显示的表达式的值

关于断点的几个用法

参数用法
disable 断点号关闭断点
enable 断点号打开断点
enable once 断点号开启一次
enable delete 断点号开启一次后删除
delete 断点号删除断点
clear清除当前行的断点
c/continue继续执行程序,直到下一个断点处

关于数据的几个用法

命令用法
display+表达式用于显示表达式的值,每当程序运行到断点处都会显示表达式的值
info display用于显示当前所有要显示值的表达式情况
delete display + 编号用于删除一个要显示的值
disable/enable display+编号使要显示的一个表达式的值失效/开启
undisplay +编号用于结束某个表达式的显示
whatis+变量用于显示变量类型
set 变量=变量值用于改变程序中某个变量的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux gdb 调试