您的位置 首页 元件

你会运用GDB调试指令?

你会使用GDB调试命令?-是Linux/Unix定义的信号,SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号; SIGKILL表示终止程序运行的信号,等等。

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            检查函数调用栈的一切信息。 

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/99777.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部