release版本和Debug版本
Release版本:该版本用于发布的最终产品版本。它会进行各种优化,以提高代码的执行效率和运行速度。编译时通常会选择较高的优化级别,此外,该版本还会进行链接优化,移除未使用的代码和数据,减少可执行文件的大小。在编译时,通常会禁用调试符号的生成,以减少文件大小和保护源代码。
Debug版本:该版本用于调试和开发阶段的版本。它包含了调试所需的详细符号信息,可以帮助开发人员定位和修复代码中的错误。编译时通常会禁用大部分的优化选项,以便在调试过程中更好的观察和理解代码。
那么gcc在编译时会产生什么模式呢?
release模式
写个文件测试:
那如何产生一个dubug版本的呢?
GDB
gdb是一款用于调试程序的开源工具,它在Linux系统中非常常用。
安装指令:
yum install -y gdb
一般来说,系统会默认安装,如果没有,就按上面指令进行安装,如果是普通用户,需要在前面加上sudo;
一般步骤
1.先产生一个可执行程序文件;
2.启动gdb,并指定要调试的可执行文件。
指令:gdb <可执行文件>
3.在gdb命令行界面中,可以执行各种命令来控制程序的执行;
4.使用gdb提供的命令和快捷键来进行单步执行、查看变量、检查调用栈等操作,以便找出程序中的错误。
常用命令
命令 | 作用 |
list(l) +行号 | 显示binFile源代码,接着上次的位置往下列,每次列10行。 |
run(r) | 启动程序的执行 |
break(b) | 设置断点,可以是代码行、函数名等 |
continue ( c ) | 继续执行程序,直到遇到下一个断点或者程序结束 |
info b | 显示当前所有断点的信息 |
d+断点编号 | 删除对应的断点 |
disable+断点编号 | 让对应断点失效 |
enable+断点编号 | 恢复对应断点 |
step(s) | 逐语句执行,会进入函数内部 |
next(n) | 逐过程运行,不会进入函数内部 |
print§+变量 | 打印变量的值 |
display+变量 | 常显示变量的值 |
backtrace(bt) | 显示当前的函数调用栈 |
finish | 结束一个函数的运行 |
until+行数 | 可以跳到指定行 |
set var 变量=值 | 在调试过程中,直接改变变量的值 |
quit | 退出gdb |
测试:
l+行号
断点:
运行调试:
逐语句和逐过程:
查看变量:
continue:断点的跳跃
调用堆栈查看:
finish:
until:
set var: