(1)调试器GDB的基本使用方法 https://www.cnblogs.com/arnoldlu/p/9633254.html
(2)Linux中用gdb 查看代码堆栈的信息https://www.cnblogs.com/chengliangsheng/p/3597010.html
GDB调试大概有三种方式:
(1)调试已经生成好的可执行文件
gdb 可执行文件
注意编译的的时候需要g++ 后面加上-g选项,才能把调试信息添加到可执行文件中
如果是CMakeList文件,则需要加上
SET(CMAKE_BUILD_TYPE "Debug") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
(2)调试core文件
gdb 可执行文件 core文件
注意编译的的时候需要g++ 后面加上-g选项,才能把调试信息添加到可执行文件中
如果是CMakeList文件,则需要加上
SET(CMAKE_BUILD_TYPE "Debug") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
(3)在线调试运行中的程序‘
可以借助指令 pidod 程序名
1) gdb attach PID
2) gdb 文件名 PID
3) gdb -p PID
注意,当开始调试的时候,原本正在运行的程序会停下,当调试完成后,如果想令当前程序进行执行,消除调试操作对它的影响,需手动将 GDB 调试器与程序分离,分离过程分为 2 步:
- )执行 detach 指令,使 GDB 调试器和程序分离;
- )执行 quit(或 q)指令,退出 GDB 调试。
r重新运行程序
bt查看堆栈
f查看当前堆栈层,刚调试开始时,堆栈都处于最底层
up把当前堆栈往上移动一层
down把当前堆栈往下移动一层
l查看当前堆栈层源代码
p 变量: 打印当前堆栈层变量的值