目录
2.1 调试入门--会使用gdb进入调试、layout显式代码窗口、break打断点、netx下一步、run执行代码、print查看变量的值
2.2使用step进入到子函数内执行,使用watch自动的查看变量值的变化
一、常用命令的复习
二、gdb调试C++程序
2.1 调试入门--会使用gdb进入调试、layout显式代码窗口、break打断点、netx下一步、run执行代码、print查看变量的值
要调试的源代码;
1 #include <iostream> 2 using namespace std; 3 4 int sum_factors(int n){ 5 int sum = 0; 6 for(int i = 1; i <= n; ++i){ 7 if(n % i == 0) 8 sum += i; 9 } 10 return sum; 11 } 12 13 int main(){ 14 int number = 60; 15 int sumf = sum_factors(number); 16 cout<<"Sum of all factors:"<<sumf<<endl; 17 18 return 0; 19 }
总的调试步骤:
g++ -g main.c -o main
gdb main
layot next #打开显式你的代码的窗口,以便在调试的时候也可以看到你的代码()
b main #在main()函数处打一个断点
run #执行代码,并停在你打的断点那里,只写一个r也可
next #执行main()函数中的下一个语句,只写一个n也可
p number #打印main()函数中的number变量的值,写print也可
(1)编译源代码,并添加-g生成符号表
g++ -g main.c -o main
(2)进入gdb调试
(3)打开显式你的代码的窗口,以便在调试的时候也可以看到你的代码
layot next
(4)在main()函数处打一个断点,并执行,或者写break也可
b main #或者写成b 你想要打断点的行号 如b 23 #表示在23行打一个断点
(5)执行下一步,并打印变量number的值
next #写成n也可
print number #写成p number也可
接下来如果执行到第18行也就是return 0;处,如果继续执行next的话,会报错,所以执行完你想看的结果,最后执行run就会重新让你选择是否再次调试程序,如果再次开始调试程序的话,原来打的断点还是有效的。
(6)执行run
最后使用q退出gdb调试
2.2使用step进入到子函数内执行,使用watch自动的查看变量值的变化
(1)依次执行下面的命令
g++ -g main.c -o main
gdb main
layot next #打开显式你的代码的窗口,以便在调试的时候也可以看到你的代码()
b main #在main()函数处打一个断点
run #执行代码,并停在你打的断点那里,只写一个r也可
(2)使用watch自动的查看变量的变化值
watch 查看变量时只要变量的值有变化就停止,执行时不要用n,用c(即continue)执行就会显示 出变量的变化情况。
不要用next,因为next本身就是单步执行,使用c,程序会自动在watch point停住,且必须是run之后再watch变量
执行下面的命令:
watch number #监视变量number continue #一直执行代码,直到监视的变量发生变化
回车之后:
(3)进入子函数---使用step或s
(4)可以继续设置断点,以跳出for循环
但是如果使用next的话,则可以一下子就跑到设置断点的第十行处
但是!!!实际上反过来了,使用如果继续使用next的话,是一直执行for循环,然后如果使用continue的话,则一下子跑到设置断点处的第十行那里。
(5)子函数执行完毕,一直使用next则可以返回主函数继续执行
参考b站中gdb教学视频(外语):https://www.bilibili.com/video/BV1Hj411f7pj?from=search&seid=4008207360523440897