5.局部逐行查找
n:逐过程调试,不会进入函数体内部(就是VS中的F10)
我们重新开始进入gdb,开始下面的操作
然后r运行到第17行
接着我n
程序会运行到第19行(因为第18行是空行,没有语句)
并不会进入Sum函数当中
然后我们继续c,因为我们只设置了一个断点,所以继续c会直接运行到程序结束
s:逐语句调试,会进入函数体内部进行调试(就是VS中的F11) • 1
然后我们依然是先r运行到第17行,
然后s
因为
所以我们可以直接回车单步执行
这个单步执行的方式,n也一样
n和s的区别只有进不进入函数的区别
6.监视变量
这个时候我想看一下i,n,sum的值,i和n的地址
p 变量:显示变量的内容或地址 • 1
那么怎么常显示呢?
display 变量名/变量的地址:跟踪查看一个变量,常显示该变量的内容或地址(就是VS中的监视窗口) undisplay 该变量的编号:取消对该变量的监视
我们可以display
我现在不想常显示sum和&i了,可以使用undisplay
7.其他命令
我现在想知道我在哪个函数里面,我是从哪个函数当中过来的
可以使用bt
bt:查看调用堆栈
我就可以看出我现在是在Sum函数当中,我是从main函数的第17行过来的
set var name=value:在接下来的调试过程中修改name这个变量的值为value (没有修改文件中该变量的值,用于进行多分支(if else switch case....)测试)
下面我们来看一下这个set var的用处
我重新写一份代码
然后r运行到第5行
现在我想测试一下a2的情况,看看我a2的那个分支是否会按我预期的一样执行
我们发现这样就能够在调试的过程当中可以一次性成功测试所有分支,避免了我想要去测试其他分支时还需要再去修改源代码中相应的值
我们新建了一个文件test1.c
然后在里面写了一个死循环
下面我们测试一下:
1.直接r运行->程序卡住
然后我们ctrl+c退出此次r运行
2.借助断点进入Sum函数执行finish
然后我们ctrl+c退出,然后重新r运行到18行
3.接着until运行到20行
以上就是Linux基础环境开发工具的使用(三):gdb调试器的全部内容,希望能对大家有所帮助!