gdb零散学习心得。

引用:

 

记录学习心得。未来将统一整理。

一、基础知识

1:细节整理。

  1,启动GDB的前置要求。

    1)使用gcc/g++时,添加-g的指令。例如:g++ -g test.cpp -o test

    2)如没有添加编译信息,可以运行程序,后使用源代码关联。(不确定此方式的具体操作方法

  2,GDB中可以使用shell

    1)例:shell make <make-args> // rebuild source code.

    2)可以忽略shell前置:make <make-args> // rebuild source code.

  3,自动补全和查找功能。

    1)b 'buffer( M-? 可以用来搜索buffer函数的位置。

    2)可以使用TAB键进行自动补全。

  4,调试已运行程序。

    1)查找到进程ID,使用ID来调试

    2)使用gdb <program>来链接源代码,然后attach来链接到进程。

  5,暂停和继续。

    1)断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),信号(single),线程停止(thread stop)。

    2)继续(continue)

  6,if判断:break/watch支持if判断。catch不支持。

  7,GDB中可以查看三种变量值:

    1)全局变量。

    2)静态全局变量。

    3)局部变量。

基本命令:

1 启动GDB
  gdb <program>
  gdb <program> core    // add a core file.。
  gdb <program> <PID>   // if it is a server process. gdb will attach it automitically.
2 运行参数。
  set args  // 指定运行时参数。
  show args  // 显示运行参数。
3 运行环境
  path <dir>  // 设置程序运行路径
  show path
  set environment varname [=value]  // 设置环境变量,set env USER=zheng
  show environment [varname]
4 工作目录
  cd <dir>  // 和shell指令一致。
  pwd
5 设置程序的输入输出。
  info terminal
  tty <file>/<dev>
6 断点方式:break
  ~ <function>  // 查看函数
  ~ <+/- offset>  // 从当前行偏移多少行。
  ~ <filename:linenum>  // 源文件 多少行。
  ~ <filename:function>  // 源文件:函数
  ~ <*address>  // 内存地址处停止。
  info ~[n]  // 查看第N个断点
7 观察点:watch
  watch <expr>  // 表达式发生变化时停止。
  rwatch <expr>  // 表达式被读时停止。
  awatch <expr>  // 表达式被读/写时停止。
  info watchpoints  // 列出当前所设置的所有观察点。
8 捕捉点:catch
  catch <event>
  // 1 参数event:throw抛出,catch捕捉,exec调用,fork,vfork,un/load 共享库。
9 清除停止点:clear。
  ~
  ~ <function>
  ~ <linenum>
  ~ <filename:linenum>
  ~ <filename:function>
  delete [breakpoint][range]  // range: 例[2-5][1-3]
  disable/enable    // 使能和失能 停止点。
10 自动化调试的一个例子(包括if)
  break foo if x>0
  commands
  printf "x is %d\n", x
  continue
  end
11 信号处理
  handle <single><keywords>
  no/stop
  no/print
  no/pass
  no/ignore
  info singles
  info handle
12 线程断点
  break <linespec> thread <threadno>  // break的其他方式也可以使用。
13 查看栈。
  backtrace(bt)
  bt [n]  // 打印n层信息
  bt [-n] // 打印底下n层信息
  frame(f) [n]  // 查看第N层
  up/down [n]  // 向 上/下 移动 N层。默认为1
  info frame  //  打印更详细的信息。
14 显示源代码
  list <first>,<last>/<>  // 以参数确定显示位置。break可以使用的参数,list都可以使用
  set listsize <count>  // 设置显示行数。
  show listsize
15 搜索(正则表达式)
  forward-search <regex>
  search <regex>
  reverse-search <regex>
16 指定源文件路径。
  directory(dir) <dirname>
  shwo dir
17 自动显示功能
  display <expr>
  display/<fmt> <expr>/<addr>
  undisplay ...
  delete display ...
18 GDB环境变量
  set $foo = *obj_ptr
  show convenience
  例:
  set $i = 0;
  print array[$i++]->content
19 修改程序中的变量:
  print x=4  // X时C/C++中变量
20 调转,强制调用函数和强制返回。
  jump <linespec>/<address>
  call <expr>
  return <expr>/<>

 

 三、

posted on 2015-01-30 14:58  zheng39562  阅读(194)  评论(0编辑  收藏  举报

导航