您的位置:首页 > 其它

gdb 技巧学习

2015-12-17 16:12 162 查看
1. until

这个用于执行完循环。

在执行完循环体内的最后一条语句之后执行 until, 就会执行完循环体到后面的一个语句停下。

2. finish

执行完当前的函数。

3. tui

是一个命令行的界面,能同时把代码显示出来。

show scheduler-locking  gdb线程调试 显示线程状态

set scheduler-locking on gdb调试加锁当前线程,其他线程停止

. 多线程下禁止线程切换:set scheduler-locking on

debug多进程:

默认情况下,当fork一个子进程之后,gdb会继续debug父进程,而子进程会运行下去.不过我们能够改变这个.

set follow-fork-mode mode 这里mode可以为parent或者child. parent是默认值,而child的话就是gdb继续debug子进程,而父进程会运行下去.

如果你想要同时debug父子进程,也可以设置:

set detach-on-fork mode 默认是on,也就是只能debug一个进程,如果改为off则可以同时debug父子进程.

保存一个书签稍后返回.

checkpoint 保存当前的程序的状态.

restart checkpoint-id 返回到checkpoint-id那个点.这个值可以用info checkpoint来查看

breakpoint,watchpoint以及catchpoint

breakpoint 就是断点.

watchpoint 就是用来检测变量的改变,他可以看做是特殊的断点,也就是当变量改变时停止程序.

catchpoint 是另外一种特殊的断点,用来监测某一事件的发生,有点类似其它语言中的异常.

gdb可以监测在你的程序中的任何信号。

来看命令。

handle signal [keywords...]

这个命令用来改变信号signal(名字或者数字)在gdb中的行为。

其中关键就是keywords.在这里keywords可以为下面几种类型:

1 nostop gdb接收到信号不会停止程序,而只是打印出一段message

2 stop 和上面类似只不过会停止程序。

3 print 当信号发生必须打印一条消息通知。

4 noprint 信号发生,gdb将不会打印任何东西。

5 pass和noignore 这两个是同义的。表示信号对你的程序是可见的。

6 nopass和ignore 这两个也是同义的。和上面相反。。

调试宏:在GCC编译程序的时候,加上-ggdb3参数,就可以了

info macro – 你可以查看这个宏在哪些文件里被引用了,以及宏定义是什么样的。

macro – 你可以查看宏展开的样子。

x命令是用来查看内存的,在gdb中 “help x” 你可以查看其帮助。

x/x 以十六进制输出

x/d 以十进制输出

x/c 以单字符输出

x/i  反汇编 – 通常,我们会使用 x/10i $ip-20 来查看当前的汇编($ip是指令寄存器)

x/s 以字符串输出

二 调试多进程

GDB多线程调试的基本命令:

info threads 查看当前进程的线程。

thread <ID> 切换调试的线程为指定ID的线程。

break [LOCATION] [thread THREADNUM] [if CONDITION]  在[LOCATION]处为[thread THREADNUM]设置断点在满足条件[if CONDITION]时停住 。

thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。

thread apply all command  让所有被调试线程执行GDB命令command。

set scheduler-locking off|on|step,这个是问得最多的。在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。

off 不锁定任何线程,也就是所有线程都执行,这是默认值。

on 只有当前被调试程序会执行。

step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。

other:

gdb中的变量以$开头,比如你想打印一个数组中的个个元素,你可以这样:

(gdb) set $i = 0

(gdb) p a[$i++]

--------------------------------------------我是分割线----------------------------

sudo apt-cache search   package 搜索包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: