1.Debug 版本和 Release 版本
1.1Debug 版本
Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。
Debug 版本的生成:
因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。
gcc -c hello.c -g —> 生成包含调试信息的中间文件
gcc -o hello hello.o
或者 gcc -o hello hello.c -g
1.2Release 版本
Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版本。
首先将源代码编译、链接生成 Debug 版本的可执行文件,然后通过‘gdb Debug 版本的可执行文件名’进入调试模式。
可见直接编译生成可执行程序与生成带有调式信息的可执行程序的文件大小不同。大小不同正是由于一个带有调式信息,一个不带有调试信息
2.单线程单进程调试基本命令
- l //显示 main 函数所在的文件的源代码
- list 文件名:num //显示 filename 文件 num 行上下的源代码
- b 行号 //给指定行添加断点
- b 函数名 //给指点函数的第一有效行添加一个断点
- info break //显示断点信息
- delete 断点号 //删除指定断点
- disable 断点号 //将断点设定为无效的,不加断点号,将所有断点设置为无效
- enable 断点号 //将断点设定为有效的,不加断点号,将所有断点设置为有效
- r(run) //运行程序
- n(next) //单步执行
- c ( continue) //继续执行,直接执行到下一个断点处
- s //进入将要被调用的函数中执行
- finish //跳出函数
- q //退出调试
- p val //打印变量 val 的值
- p &val //打印变量 val 的地址
- p a+b //打印表达式的值
- p arr(数组名) //打印数组所有元素的值
- p *parr@len //用指向数组的指针打印数组所有元素的值
- display //自动显示,参数和 p 命令一样
- info display //显示自动显示信息
- undisplay + 编号 //删除指定的自动显示
- ptype val //显示变量类型
- bt //显示函数调用栈
3.gdb调试器使用演示(单线程情况下)
只使用了部分指令,刚开始时,对着指令表操作,调试几次后,会发现和windows下的vs调试操作一样,只不过在这里都变成了指令而已。