我们知道在Visual Studio2022中,我们可以对编好的代码进行调试来分析dug的位置,那Linux环境下如何进行程序的调试呢?那就是使用Linux调试器:gdb。
1.背景
- 程序的发布方式有两种,debug模式和release模式
- Linux gcc/g++出来的二进制程序,默认是release模式,不能调试
- 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
Makefile的用法可以看我之前的文章,这里知道gcc编译时加 -g 选项即可。
release版本比debug版本的可执行程序所占空间要小,因为debug模式下要在文件内保存相关的调试信息,大家可以自己生成两个版本的文件比较一下。
2. 开始使用
我们先写一个可以1到100的累加mycode.c源文件,把它以debug模式编译。
下面命令中要注意命令中间的空格!
进入gdb调试:gdb 可执行文件名称
gdb 退出: ctrl + d 或 quit (q)调试命令:
- list/l 行号:显示 mycode.c 源代码,接着上次的位置往下列,每次列10行。
- list/l 函数名:列出某个函数的源代码。
- r或run:运行程序。开始调试,如果没有断点会直接执行完整个程序。
- n 或 next:单条执行。遇到函数不会进入。
- s或step:进入函数调用。会进入函数。
- break(b) 行号:在某一行设置断点
- break(b) 函数名:在某个函数开头设置断点
- info break(b) :查看断点信息。
- finish:执行到当前函数返回,然后停下来等待命令(即执行完整个函数)
- print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
- p 变量:打印变量值。
- set var:修改调试中变量的值
- continue(或c):从当前位置开始连续而非单步执行程序,执行到下一个断点。
- run(或r):从开始连续而非单步执行程序
- delete breakpoints:删除所有断点
- delete breakpoints n:删除序号为n的断点
- disable breakpoints:禁用断点,
- enable breakpoints:启用断点
- info(或i) breakpoints(b):参看当前设置了哪些断点
- display 变量名:跟踪查看一个变量,每次停下来都显示它的值
- undisplay:取消对先前设置的那些变量的跟踪
- until X行号:执行到X行停下来,但是中间有断点也会停下来。
- breaktrace(或bt):查看各级函数调用及参数,就是vs下的调用堆栈。
- info(i) locals:查看当前栈帧局部变量的值,不用自己输入。
- quit:退出gdb
本篇结束!