1.背景

  • 程序的发布方式有两种,debug模式和release模式。
  • Linux gcc/g++出来的二进制程序,默认是release模式。
  • 要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项,加入一些debug信息。
  1. debug版本是面向程序员的,因为程序员开发时遇到bug进行调试,需要在程序里加入调试信息。
  2. 而release版本是面向用户的,用户不需要调试信息。

image.png

2.gdb使用

  • 示例代码: ```c

    include

int Sum(int n) { int i = 1,sum = 0; for (;i<=n;++i) { sum += i; } return sum; }

int main() { int num = 10; int res = Sum(num); printf(“%d\n”,res);

return 0; }

  1. - 使用:
  2. `gdb + 文件名:进入调试`<br />`ctrl + d 或 quit/q:退出调试`
  3. - 展示命令:
  4. ```c
  5. list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
  6. list/l 函数名:列出某个函数的源代码
  7. info break/ info b :查看断点信息
  8. print/p:打印表达式的值,通过表达式可以修改变量的值或者调用函数
  9. display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  10. undisplay:取消对先前设置的那些变量的跟踪
  11. info(i) locals:查看当前栈帧局部变量的值
  12. breaktrace(或bt):查看各级函数调用及参数
  • 示图:

QQ图片20220224114510.png

  • 修改命令:

    1. set var:修改变量的值
  • 断点: ```c break/b 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

delete breakpoints:删除所有断点

delete breakpoints n /d n:删除序号为n的断点

disable breakpoints n/disable n:禁用序号为n的断点

enable breakpoints:启用断点

  1. - 示图:
  2. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/22870205/1645675709755-856c8c34-6d20-4570-af6c-fa5dc870ef4c.png#clientId=u131f0e47-5cb5-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=273&id=ud90dc9d8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=545&originWidth=1113&originalType=binary&ratio=1&rotation=0&showTitle=false&size=72459&status=done&style=none&taskId=uf8bd062f-e7bd-4bde-bed6-b8d4f6a2941&title=&width=556.5)
  3. - 执行:
  4. ```c
  5. run/r:从开始连续而非单步执行程序
  6. next/n:单条执行(相当于vs下的F10)
  7. continue/c:从当前位置开始连续而非单步执行程序(执行到下一个断点处)
  8. step/s:进入函数调用(相当于vs下的F11)
  9. finish:执行到当前函数返回,然后停下来等待命令
  10. until X行号:执行跳至X行
  • 示图:

image.png