GDB调试笔记

来源:互联网 发布:掰弯体验知乎 编辑:程序博客网 时间:2024/06/15 06:13

一、调试前题

1、要使用GDB进行调试必须在编译的时候加上编译选项:

      命令行编译:   g++  -g  test.cpp  -o  test

      Makefile工程编译: ./configure  --enable-debug=yes

二、调试步骤

1、进入调试: #gdb  test

2、设置断点:break(b)

       b  16                                          #断点设置在16

       b  src/A.cpp:行号             #设置A文件的某一行

       b  funcname                              #设置在函数的入口处,双Tab可以补齐函数名

       b  namespace::A::funcname     #设置项目中的某个函数的入口处

       b  src/A.cpp:funcname              #设置某文件的函数的入口处

3、运行程序到断点处:run(r)

4、单步调试:

      next(n) #不进入函数内部

      step(s) #进入函数内部

5、继续运行到下一断点:continue(c)

6、退出循环体:until(u)

7、退出函数:finish(f)

8、退出调试:quit(q)

三、常用命令

1、列出源码: list(l)

2、直接回车表示执行上一次命令。

3、打印变量i的值:print(p)  i

四、启动gdb的方式

1、正常启动方式: gdb   test

2、调试正在运行的后台服务程序: gdb   test   pid    (pid为进程号)

3、当出现内存错误时,查看错误信息: gdb   test   core

4、调试内存泄露问题:

  • 先取消限制,生成core.pid文件:ulimit  -c  unlimited; 
  • 运行程序test
  • 启动调试:gdb  -c  core.pid  test
  • 查看堆栈情况: where 或者bt
五、调试多线程程序
1、查看多线程的线程信息:  info   threads
2、切换线程(带*号表示当前线程):   thread  id      (id为前面的序号,如1、2、3)
3、设置执行线程: set   scheduler-locking   off | on |  step              (off表示所有线程都执行,on表示执行当前调试线程,step表示停止执行该线程)

原创粉丝点击