Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335468
  • 博文数量: 56
  • 博客积分: 2058
  • 博客等级: 中尉
  • 技术积分: 688
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-11 09:19
个人简介

code rush

文章分类

全部博文(56)

文章存档

2012年(2)

2011年(54)

分类: LINUX

2011-09-18 08:45:10

  1. 1 基本命令

  2. 1.1 启动和退出GDB
  3. gdb test
  4. 启动GDB调试test程序

  5. gdb programe 2146
  6. 启动GDB调试进程号为2146的进程

  7. gdb
  8. (gdb) attach 2146
  9. 启动GDB挂载到进程号为2146的进程上开始调试

  10. (gdb) detach 2146
  11. 释放进程号为2146的进程,终止调试

  12. (gdb)set args –a –b123 -c
  13. (gdb)show args
  14. 设置和查看被调试程序的启动参数

  15. (gdb)run
  16. (gdb)kill
  17. 启动和停止当前被调试程序,run命令也可跟参数
  18.  
  19. (gdb)quit
  20. 终止调式,退出GDB

  21. 1.2查看源代码
  22. (gdb)list 123
  23. 查看当前源代码文件中123行及其前后5行的代码

  24. (gdb)list abc.cpp : 123
  25. 查看源文件abc.cpp中123行及其前后5行的代码

  26. (gdb)list foo
  27. 查看函数foo起始行及其前后5行的代码

  28. (gdb)list abc.cpp : foo
  29. 查看源文件abc.cpp中函数foo起始行及其前后5行的代码

  30. (gdb)list 0xabcd1234
  31. 查看包含0xabcd1234地址的代码行及其前后5行的代码

  32. 2.流程控制
  33. (gdb)s
  34. 单步执行

  35. (gdb)n
  36. 单步执行,但不展开函数调用

  37. (gdb)c
  38. 继续执行

  39. (gdb)u
  40. 执行至循环结束

  41. (gdb)u 123
  42. 执行至123行

  43. (gdb)finish
  44. 跳出当前函数

  45. (gdb)bt
  46. 查看当前函数调用堆栈

  47. (gdb)frame 3
  48. 跳转到函数堆栈中索引为3的函数上下文

  49. 3.查看数据
  50. 3.1 GDB的数据显示格式
  51. x 按十六进制显示
  52. d 按十进制显示
  53. u 显示32位无符号整型。
  54. o 按八进制显示
  55. t 按二进制显示
  56. a 按地址显示
  57. c 按字符显示
  58. f 按浮点数显示
  59. s 按字符串显示

  60. 3.2查看变量和数组
  61. (gdb)p foo
  62. 查看变量foo的值

  63. (gdb)p *bar
  64. 查看指针bar所指对象内容

  65. (gdb)p/x foo
  66. 按十六进制查看变量foo的值

  67. (gdb)p bar@10
  68. 查看数组bar的10个元素

  69. (gdb)ptype foo
  70. 查看foo的类型定义

  71. 3.3查看内存内容
  72. x命令格式:x/[count][format][size] address

  73. size可以是b(byte), h(halfword), w(word), g(giant, 8 bytes)

  74. (gdb)x/10ub ptr
  75. 按无符号整形从ptr所指地址开始输出10字节

  76. (gdb)x/5xw ptr
  77. 按16进制从ptr所指地址开始输出5个字(10字节)

  78. 4 断点
  79. 4.1 设置断点
  80. (gdb)b 123
  81. 在当前源文件的123行设置断点

  82. (gdb)b abc.cpp : 123
  83. 在源文件abc.cpp的123行设置断点

  84. (gdb)b foo
  85. 在全局函数foo设置断点

  86. (gdb)b foo::bar
  87. 在类foo的成员函数bar设置断点

  88. (gdb)b ns::foo::bar
  89. 在命名空间ns中的类foo的成员函数bar设置断点

  90. (gdb)b 123 if foo == 1 && bar == 0
  91. 在当前源文件123行设置断点,并且当foo等于1且bar等于0时才命中
  92.  
  93. 4.2 管理断点
  94. (gdb)info b
  95. 查看所有断点信息

  96. (gdb)d
  97. 删除所有断点

  98. (gdb)d 2
  99. 删除2号断点

  100. (gdb)enable 1
  101. 打开1号断点

  102. (gdb)disable 5
  103. 禁用5号断点

  104. 5 多线程
  105. (gdb)info threads
  106. 查看线程表

  107. (gdb)thread 2
  108. 切换到线程表中索引为2的线程

  109. (gdb)b foo 2
  110. 在函数foo设置断点,并且只在索引为2的线程中命中

  111. (gdb)set follow-fork-mode parent
  112. 当fork调用发生时,继续调试父进程

  113. (gdb)set follow-fork-mode child
  114. 当fork调用发生时,继续调试子进程
阅读(1880) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~