码迷,mamicode.com
首页 > 数据库 > 详细

GDB常用命令

时间:2015-09-19 15:12:37      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:

启动和停止:

  gdb <gropram>  //使用gdb调试program可执行文件,注意在编译时gcc要加入-g参数。

  gdb <program> core //用 gdb 同时调试一个运行程序和 core 文件,core 是程序异常终止后 core dump 后产生的文件。

  gdb <program> <PID>  //如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID。gdb 会自动attach 上去,并调试他。program 应该在 PATH 环境变量中搜索得到。

  run或r  //运行程序(在此给出命令行参数)

  kill  //停止程序

 

显示代码:

  list==l

  list<linenum>  //显示程序第linenum行周围的程序

  list<functiont>  //显示函数名为function的函数的源程序

  list  //显示当前行后面的源程序

  list-  //显示当前行前面的源程序

 

断点:

  break == b

  break <function>   //在函数function入口处设置断点

  break <linenum>  //在指定行号停住

  break *addreee  //在地址address处停止

  info break[n]或info breakpoints[n]  //查看断点信息, n表示断点号

  delete[breakpoints][range]       //删除指定的断点,breakpoints为断点号,如果不指定断点号,则表示删除所有的断点。range表示断点号的范围(如:3-7)。其简写命令为d。

 

恢复程序运行和单步调试:

  step<count>或s<count>  //单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译有 debug 信息。很像 VC 等工具中的 step in。后面可以加 count 也可以不加,不加表示一条条地执行,加表示执行后面的 count 条指令,然后再停住。

  next<count>或n<count>  //同样单步跟踪,如果有函数调用,他不会进入该函数。很像 VC 等工具中的 step over。后面可以加 count 也可以不加,不加表示一条条地执行,加表示执行后面的 count 条指令,然后再停住。  

  finish  //运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。

    until 或 u  //当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。

 

输出:

  print == p

  print $eax  //以十进制输出%eax的内容

  print /x $eax  //以十六进制输出%eax的内容

  print  /t $eax  //以二进制输出%eax的内容

  print 0x100  //输出0x100的十进制表示

  print /x 555  //输出555的十六进制表示

  print /x ($ebp + 8)  //以十六进制输出%ebpd 内容加上8

  print *(int*) 0xfff076b0  //输出位于地址0xfff076b0

  print *(int*) ($ebp+8)  //输出位于地址%ebp+8处的整数

  x/2w 0xfff0760b0  //检查从地址0xfff076b0开始的双字

  x/20b sum  //检查函数sum的前20个字节

  p *a@len  //数组的全部元素,a是数组名,len是数组元素的个数。如果是静态数组的话,可以直接用 print 数组名,就可以显示数组中所有数据的内容了。

   

检查代码

  disas  //反汇编当前函数

  disas sum  //反汇编函数sum 

  disas 0x8048397  //反汇编位于地址0x8048397附近的函数

  disas 0x8048394 0x80483a4  //反汇编指定地址范围内的代码

 

堆栈:

  backtrace或bt  //查看函数堆栈

 

多线程:

  info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有的是当前调试的线程。

  thread ID 切换当前调试的线程为指定ID的线程。

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

 

参考资料:

  1. 《深入理解计算机系统》(第二版)  机械工业出版社  P175

GDB常用命令

标签:

原文地址:http://www.cnblogs.com/vincently/p/4812127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!