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

gdb 调试

时间:2016-03-04 16:05:30      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

一、gdb 调试-源代码关联

  在调试程序的过程中,可以自由地查看相关的源代码(如果有源代码的话)是一项最基本的特性。gdb 当然也提供了这项特性,虽然不如IDE直观,但在一定程度上要比IDE更加灵活和快捷。
gdb之所以能够知道对应的源代码,是因为调试版的可执行程序中记录了源代码的位置;因为源代码的位置在编译之后可能会移动到其它地方,所以gdb还会在当前目录中查找源代码,另外gdb也允许明确指定源代码的搜索位置。
  在一个调试会话中,gdb维护了一个源代码查找目录列表,默认值是编译目录和当前工作目录。当gdb需要一个源文件的时候,它依次在这些目录中查找,直到找到一个或者抛出错误。
gdb还维护了一个路径替换规则,将要搜索的原始路径按照找到的第一个规则做前缀替换,然后再在源码搜索目录中查找文件。

     因此,源代码关联默认情况下搜索路径如下:

  1. gdb在编译时目录中搜索 ($cdir : compilation directory)
  2. 当前目录中搜索 ($cwd : current working directory)
  3. 源代码搜索目录列表 (substitute-path)

 除了默认搜索路径,还可以通过如下方式来设置源代码搜索位置和替换规则 

  1. gdb允许明确指定源代码位置,或者路径替换规则,以应付源代码位置迁移的情况。
    • directory path-list:将一个或者多个源代码搜索目录加入到当前源码搜索目录列表的前面,目录之间使用空格间隔。
      •   directory:不带参数的directory将源码搜索目录恢复为默认值。
    • set directories path-list:将源码目录设置为path-list,但是会补上默认目录(同 directory path-list)。
    • show directories:显示源码搜索目录列表。

  2. gdb允许设置路径替换规则,以应付源代码位置迁移的情况。

    • set substitute-path from to   :设置目录替换规则,放置在规则列表的末端。
    • unset substitute-path [path] :删除path对应的替换规则,或者删除所有的替换规则。
      show substitute-path [path] :显示path对应的替换规则,或者显示所有的替换规则。

 

二、 gdb 调试-查看机器码

 

  在一些必要的时候,我们需要查看汇编代码来诊断问题。gdb 提供了这种可能。

  gdb提供了两种能力:

    • 显示源代码位置与指令地址之间的映射;
    • 显示指定位置的汇编代码。
  1. info line xx
    • info line linespec:显示源代码linespec处对应的汇编地址范围。linespec 可以是函数名
    • info line *addr:显示地址addr处对应的源代码位置。

   2.  disassemble,disassemble /m  [/m表示混合输出源代码和汇编代码],disassemble /r [/r表示混合输出二进制和汇编代码]

      显示指定地址范围内的汇编代码,有4种使用形式: [参数可以是16进制的地址,也可以是函数名]

    • 第一种不带参数,显示当前正在执行的函数的汇编代码;
    • 第二 种是一个参数,显示该地址所在函数的汇编代码;
    • 第三种是两个参数的disassemble start,end,显示地址[start,end)内的汇编代码;
    • 第四种是两个参数的 disassemble start,+length,显示地址[start,start+length)内的汇编代码。

    set disassembly-flavor instruction-set:设置显示汇编代码时使用的风格,目前只针对intel x86系列,可取的值为att和intel,默认是att。

    show disassembly-flavor:显示disassembly-flavor设置

    set disassemble-next-line on|off|auto:当程序停止下来的时候,是否显示下一行源代码的汇编代码,默认为off。

    show disassemble-next-line:显示disassemble-next-line设置。

二、 gdb + gdbsever 联合调试

 

 

 

 

 

 

 

 

 

 

 

参考:

    [1]. 使用GDB进行调试:  http://www.cnblogs.com/frydsh/p/3367015.html

  [2]. 使用GDB的源代码查看功能: http://www.cnblogs.com/frydsh/p/3388828.html

gdb 调试

标签:

原文地址:http://www.cnblogs.com/yaozhongxiao/p/5242341.html

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