1、检查源码:
list [函数名][行数]
2、暂停程序
(1)设置断点:
a、break + [源代码行号][源代码函数名][内存地址]
b、break … if condition …可所以上述任一参数,condiTIon是条件。例如在循环体中能够设置break … if i = 100 来设置循环次数
(2)调查断点:
a、watch + [变量][表达式] 当变量或表达式值改动时即停住程序。
b、rwatch + [变量][表达式] 当变量或表达式被读时,停住程序。
c、awatch + [变量][表达式] 当变量或表达式被读或被写时,停住程序。
(3)设置捕捉点:
catch + event 当event发生时,停住程序。
event可所以下面的内容:
a、throw 一个C++抛出的反常。(throw为关键字)
b、catch 一个C++捕捉到的反常。(catch为关键字)
c、exec 调用体系调用exec时。(exec为关键字,目前此功用只在HP-UX下有用)
d、fork 调用体系调用fork时。(fork为关键字,目前此功用只在HP-UX下有用)
e、vfork 调用体系调用vfork时。(vfork为关键字,目前此功用只在HP-UX下有用)
f、load 或 load 载入同享库(动态链接库)时。(load为关键字,目前此功用只在HP-UX下有用)
g、unload 或 unload 卸载同享库(动态链接库)时。(unload为关键字,目前此功用只在HP-UX下有用)
(4)捕获信号:
handle + [argu] + signals
signals:
是Linux/Unix界说的信号,SIGINT表明中止字符信号,也便是Ctrl+C的信号,SIGBUS表明硬件毛病的信号;SIGCHLD表明子进程状况改动信号; SIGKILL表明停止程序运转的信号,等等。
argu:
nostop 当被调试的程序收到信号时,GDB不会停住程序的运转,但会打出音讯告知你收到这种信号。
stop 当被调试的程序收到信号时,GDB会停住你的程序。
print 当被调试的程序收到信号时,GDB会显现出一条信息。
noprint 当被调试的程序收到信号时,GDB不会告知你收到信号的信息。
pass or noignore 当被调试的程序收到信号时,GDB不处理信号。这表明,GDB会把这个信号交给被调试程序会处理。
nopass or ignore 当被调试的程序收到信号时,GDB不会让被调试程序来处理这个信号。
(5)线程中止:
break [linespec] thread [threadno] [if …]
linespec 断点设置地点的源代码的行号。如: test.c:12表明文件为test.c中的第12行设置一个断点。
threadno 线程的ID。是GDB分配的,经过输入info threads来检查正在运转中程序的线程信息。
if … 设置中止条件。
3、检查信息:
(1)检查数据:
print variable 检查变量
print *array@len 检查数组(array是数组指针,len是需求数据长度)
能够经过增加参数来设置输出格局:
/x 按十六进制格局显现变量。
/d 按十进制格局显现变量。
/u 按十六进制格局显现无符号整型。
/o 按八进制格局显现变量。
/t 按二进制格局显现变量。
/a 按十六进制格局显现变量。
/c 按字符格局显现变量。
/f 按浮点数格局显现变量。
(2)检查内存:
examine /n f u + 内存地址(指针变量)
n 表明显现内存长度
f 表明输出格局(见上)
u 表明字节数拟定(b 单字节;h 双字节;w 四字节;g 八字节;默以为四字节)
如:
x /10cw pFilePath (pFilePath为一个字符串指针,指针占4字节)
x 为examine指令的简写。
(3)检查栈信息:
backtrace [-n][n]
n 表明只打印栈顶上n层的栈信息。
-n 表明只打印栈底上n层的栈信息。
不加参数,表明打印一切栈信息。
根本gdb指令:
———————————————————————
指令 简写 功用
———————————————————————
file 装入想要调试的可履行文件.
kill k 停止正在调试的程序.
list l 列出发生履行文件的源代码的一部分.
next n 履行一行源代码但不进入函数内部.
step s 履行一行源代码并且进入函数内部.
conTInue c 持续履行程序,直至下一中止或许程序完毕。
run r 履行当时被调试的程序.
quit q 停止 gdb.
watch 使你能监督一个变量的值而不管它何时被改动.
catch 设置捕捉点.
thread t 检查当时运转程序的线程信息.
break b 在代码里设置断点, 这将使程序履行到这儿时被挂起.
make 使你能不退出 gdb 就能够从头发生可履行文件.
shell 使你能不脱离 gdb 就履行 UNIX shell 指令.
print p 打印数据内容。
examine x 打印内存内容。
backtrace bt 检查函数调用栈的一切信息。