调试:设置断点

深碍√TFBOYSˉ_ 2022-08-31 01:59 149阅读 0赞

程序

编写程序:

  1. #include <stdio.h>
  2. int main(int argc, char** argv)
  3. {
  4. unsigned long long int n, sum;
  5. n = 1;
  6. sum = 0;
  7. while (n <= 100)
  8. {
  9. sum = sum + n;
  10. n = n + 1;
  11. }
  12. return 0;
  13. }

将程序编译成可执行文件:

  1. # 使用 GDB 调试某个可执行文件,该文件中必须包含必要的调试信息(比如各行代码所在的行号、包含程序中所有变量名称的列表(又称为符号表)等)。因此必须有-g
  2. # -o main:生成可执行文件main
  3. gcc main.cpp -o main -g

准备

启动gdb调试器调试尚未执行的程序(-q表示屏蔽免责条款)

  1. $ gdb main -q
  2. Reading symbols from /home/oceanstar/workspace/cpp/code/opencv_sln/main...(no debugging symbols found)...done.
  3. (gdb)

设置断点可以在函数名和行号等上设置断点。程序运行后,到达断点就会自动暂停运行。此时可以查看该时刻的变量值、显示栈帧、重新设置端点或者重新运行等。断点命令(break)可以简写为b

断点可以通过函数名、当前文件内的行号来设置,也可以先指定文件名在指定行号,还可以指定与暂停位置的偏移量,或者用地址来设置。
在这里插入图片描述

在这里插入图片描述

设置好的断点可以通过info break确认

在这里插入图片描述

b 行号

显示带行号的源代码:l

  • 默认情况下,l 选项只显示 10 行源代码,如果查看后续代码,安装 Enter 回车即可
  • 注意,必须由源文件才能显示源代码,还有,切记不要将编译的二进制文件重命名

在这里插入图片描述

在第 7 行源代码处打断点: b 7
在这里插入图片描述
运行程序,遇到断点停止: r
在这里插入图片描述
查看代码中变量 n 的值: p n

  1. (gdb) p n
  2. $1 = 1 # 当前 n 的值为 1,$1 表示该变量所在存储区的名称

在第 7行的基础上,在第9行打断点: b 7

在这里插入图片描述

b 函数名

在这里插入图片描述
运行(run):不加参数只执行run,就会执行到了断点的位置之后暂停运行。可以简写为r

start命令:经常遇到的一个操作是在main函数上设置断点(b main),然后执行到main()函数(r)。这个操作可以用start命令替代

发表评论

表情:
评论列表 (有 0 条评论,149人围观)

还没有评论,来说两句吧...

相关阅读