1. 背景
程序的发布方式有两种,debug模式和release模式。
Linux gcc/g++出来的二进制程序,默认是release模式。
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。
2. 开始使用
调试是一个帮助我们找到问题出现在哪里的过程,而最终解决问题还是需要程序员。
如果linux上没有gdb调试工具需要安装。
sudo yum install -y gdb
开始调试:直接gdb,我们生成的可执行程序就可以开始调试了。
开始调试后只按 l 的话会出现部分行号,如果想要从头开始的话,需要按 l0
然后一直按 enter 就可以显示全部代码了,enter 可以记住上一个我们的指令。
‘r’ 让程序跑起来,需要配合其他的指令来使用。
在vs下 f9 是打断点 ,在gdb下 b +行号/函数名/文件:行号,就是对该位置打断点。
查看断点信息 ‘info b’
使当前断点失去功能但是不删除断点。disable ‘断点号’ 注意是断点号,而不是行号。从查看断点信息哪里可以知道断点号。
删除断点 d ‘断点编号’。
对比vs下的 ‘ f10 ,f11 ’,gdb则是用 n 和 s 来实现逐过程,和逐语句。
在函数这里打断点,我们 n 或者 s 便可以实现逐过程和逐语句。
那么如何在程序运行状态下查看各个变量的地址内容和地址呢?display 变量名/变量地址。
常显示变量名和变量地址 undisplay ‘编号’ 取消常显示变量地址和内容。
主要这个变量生成后才能调用 display !!!!
c:从一个断点运行到下一个断点(范围查找)。
finish:将一个函数运行结束,就停下来(范围查找)。
until:在一个范围内,直接运行到指定行(范围查找)。
在调试过程中如果想更改变量的内容实现多分支调试怎么办呢?
首先在调试的语句那里打断点。
然后 set ‘变量名’ = 我们想要设置的值就好。
就能实现不用改代码实现多分支调试。