一,GDB简介
GDB全称是GNU symbolic debugger,是Linux平台下最常用的一款调试器。GDB主要用于C/C++开发场景,同时也支持Go、Ada等语言的调试。GDB主要以命令行的形式在shell终端使用,它的一部分底层逻辑借助于ptrace进行实现。GDB的功能很强大,开发者可以在执行时修改函数变量的值以及程序的执行顺序,还可以在程序执行期间查看函数的调用过程、堆栈数据等,也可以利用GDB对代码进行断点调试。
二,两种常见编译模式:Debug模式 & Release模式
Debug模式:
代码在编译时会显示出完整的调试信息以定位问题,编译期间可以查看程序的运行时信息,且编译期间不考虑对代码的执行进行优化。生成的可执行文件执行速度偏慢。
Release模式:
代码在编译时不会显示调试信息,并且编译期间会优化代码的执行。生成的可执行文件执行速度较快。
GDB主要在Debug模式下进行使用。
三,GDB的使用流程
step.1: 开始编译之前,需要配置调试相关的编译命令
a.如果使用gcc/g++编译,需要加入参数“-g"。
b.如果使用cmake编译,需要在CMakeLists.txt中加入:
SET(CMAKE_BUILD_TYPE "Debug") //选择Debug编译模式
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
step.2: 编译生成可执行文件以后,利用GDB进入调试模式,常用的方式有如下三种
方式1:gdb [program]
利用gdb在当前目录直接启动可执行程序。
方式2:gdb [program] core
利用gdb同时调试可执行程序和core文件,core是程序非法执行时产生的文件,比如程序core dump后产生的文件。
方式3:gdb [program] [pid]
利用gdb调试服务的一个进程,pid指定了要调试的进程。运行该指令,gdb会以attach的方式进入进程内部开始调试。
step.3: 调试完,退出GDB界面
方式1:在gdb窗口敲下快捷键Ctrl+z
方式2:在gdb窗口输入指令"quit"或"q"
<