您的位置:首页 > 其它

GDB调试总结

2016-11-12 13:55 239 查看
一、core分析

1、查看命令:

ulimit -c

启动命令:

ulimit -c ulimited

查看core文件:

gdb -c core.xxx a.out

 

2、生成core文件的路径在文件/etc/sysctl.conf中

cat /etc/sysctl.conf

sysctl.conf文件中科院设置的格式符号表格。。。

3、启动整个系统的内核转储功能

 

二、gdb调试

1、使用gdb调试的文件需要使用-g编译

(1)使用makefile编译,加-g

(2)使用configure,./configure CFLAGs = "-wall -o2 -g"

 

2、gdb调试

(1)启动:gdb a.out

(2)设置断点: break或者b

break 函数名 

 break 行号

break 文件名:行号

break 文件名:函数名

break +偏移量

break -偏移量

break *地址

通过info break(info b)查看断点情况

3、显示帧栈:backtrace或者bt(别名:info stack, info s, where)

显示所有帧栈:bt

显示开头N个帧栈: bt N

显示最后N个帧栈: bt full N

4、显示变量: print 变量名(或者p 变量名)

5、显示寄存器:info registers(或者info reg)

6、单步执行:next(n) ,进入函数内部执行step(p),逐条执行汇编指令:nexti stepi

7、继续执行:continue(c)

8、监视点:watch 变量,当发生变化时暂停(awatch被访问和改变时暂停,rwatch被访问是暂停)

9、删除断点和监视点:delete n (d n)

10、改变变量的值:set variable <变量>=<表达式>

11、调试多进程方法

(1)先用ps -A | grep xxx 查看进程xxx的进程ID,然后attach到进程: attach 进程ID,attach 之后就能使用普通的gdb命令,需要将gdb和进程分离时使用detach,进程detach之后会继续运行。

(2)使用调试器选项follow-fork-mode

  gdb调试器的选项follow-fork-mode允许我们选择程序在执行fork系统调用后是继续调试父进程还是调试子进程。 

  其用法如下: set follow-fork-mode mode (mode可选parent或child,分别表示调试父进程和子进程)

12、条件断点:break 断点 if 条件

13、删除禁用断点:clear 文件名:行号

                  delete 断点编号

                  disable 断点编号

                  enable 断点编号

14、断点命令:commands 断点编号

                命令

              end

15、调试多线程方法

(1)查看进程线程:i thr

    切换到相应的线程:thr 123

(2)set scheduler-locking[off|on|step]

  调试多线程程序时,默认除了被调试的线程在执行外,其他线程也在继续执行,但有的时候我们希望只让被调试的线程运行。这可以通过这个命令来实现。 该命令设置sceduler-locking的值: 

  off表示不锁定任何线程,即所有线程都可以继续执行,这是默认值。 

  on表示只有当前被调试的线程会继续执行。 

  step表示在单步执行的时候,只有当前线程会执行。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: