GDB常用命令

 

GDB

1 GDB

 

1.1 载入程序和core

  • 载入程序 gdb –args ./myprogram arg1 arg2 …
  • 载入core gdb -c core.xxxx ./myprogram
  • 载入core gdb ./myprogram core.xxxx
  • attach进程 gdb -p <pid>

1.2 断点

  • 断点到当前文件某个函数 break <function>
  • 断点到当前文件某行 break <linno>
  • 断点到某个文件位置 break <file>:<function>/<lineno>
  • 断点到某个地址 break <addr>
  • 条件判断 break <breakspec> if <condition>
  • 查看所有断点 info breakpoints
  • 删除所有断点 delete
  • 删除某个断点 delete <break-no>
  • 开启某个断点 enable <break-no>
  • 禁用某个断点 disable <break-no>

对于多线程情况下面,默认断点断到所有线程上。我们也可以break到某个线程上。

  • break <breakspace> [thread <number>] if <condition>

1.3 流程控制

  • 运行 run
  • 继续执行 cont(continue)
  • 单步执行 n(next)
  • 单步进入 s(step)
  • 执行完本函数 finish
  • 查看当前运行状态 info prog

1.4 查看代码

  • 定位源代码目录 dir <source-directory>
  • 查看当前位置代码 list
  • 查看当前文件函数 list <function-name>
  • 查看当前文件某行 list <lineno>
  • 查看其他文件 list <file>:<function></lineno>

1.5 查看变量

  • 查看表达式类型 whatis <expr>
  • 查看变量类型 ptype <var>
  • 查看变量值 print /FMT <var>
  • 查看所有全局和静态变量 info variables
  • 查看内存内容 x/(NUM)(FMT) addr
  • dump内容 dump [OPTION] FILE start end

1.6 堆栈相关

  • 查看当前栈局部变量 info local
  • 查看当前栈调用参数 info args
  • 查看栈调用情况 bt(backtrace)
  • 查看栈调用详细情况 bt full
  • 切换函数栈 frame <frame-id>

1.7 线程相关

  • 查看当前所有线程信息 info threads
  • 切换线程 thread <thread-id>
  • 应用线程命令 thread apply [all|no1 no2 …] command

1.8 汇编相关

  • 查看当前寄存器 info registers
  • 反汇编当前地址 disassemble
  • 反汇编某个函数 disassemble <function>
  • 反汇编某个地址范围 disassemble <addr1> <addr2>
  • 设置汇编格式 set disassembly-flavor [intel/att]
posted @ 2013-07-17 22:20  z折腾  阅读(179)  评论(0编辑  收藏  举报