GDB快速入门
如果想要让代码使用GDB,加上-g
1 | g++ main.cpp -Wall -Werror -g main |
注:
- -Werror会使得编译器将warnings都看成errors
- -Wall会启用所有警告warnings
- -g会告诉编译器你的程序以后会debug
- gcc是一样的
使用gdb命令来对可执行文件进行调试,此时会进入GDB窗口进行调试
1 | gdb <executable name> |
例如:
1 | gdb main |
使用break命令来设置断点,行号为源代码中的行号,并不是目标文件中的行号
1 | break <source code line number> |
设置好断点后使用run命令来运行程序,开始调试
1 | run |
当程序遇到断点时会停止,此时可以输入list来查看断点附近的10行代码
遇到断点时使用next命令来执行到下一行,使用step命令会按照控制流运行一步,可能会执行到下一行,如果有函数则会跳入函数内的第一行,如下面的代码再value这一行断点,如果使用next会直接执行到readinput(),如果使用step会进入display()函数第一行
1 | value = display(); // break |
可以使用print命令来输出变量值,使用set命令来设置变量值
1 | print <var name to print> |
使用watch命令来设置观测变量(watchpoints),当变量发生变化时,程序会暂停,输出变化信息
注意:只能在变量在作用域内时为其设置观察点。因此,要观察另一个函数或内部块中的内容,首先在该作用域内设置一个断点,然后当程序在那里暂停时,设置观察点。
使用continue命令来使程序继续执行,如果遇到观察变量的值发生变化或者遇到断点则会暂停