GDB调试C++代码

一、编译时加上 -g调试信息并且去掉优化信息

在Makefile中增加-g调试信息并且去掉优化信息
将之前的Makefile中的文件内容
CC = g++ -std=c++11
OPT_LEVEL := -O2
改为
CC = g++ -std=c++11 -g
OPT_LEVEL :=

代码示例使用之前的TCP Client与Server
通用的Makefile编写与简单的TCP Server
通用的Makefile编写与简单的TCP Client
GDB调试C++代码

二、设置启动参数

gdb --args ./Client 127.0.0.1 6000 “hello this is a client”

说明:
–args:设置127.0.0.1 6000 "hello this is a client"为启动参数
GDB调试C++代码

三、设置断点

1、命令:l
说明:查看代码

2、命令:b 16
说明:在程序的第16行添加断点

3、命令:info break
说明:查看断点
GDB调试C++代码

四、开始调试

1、命令:r
说明:开始运行
2、命令:s
说明:进入函数内部
3、命令:n
说明:下一步
4、命令:finish
说明:跳出函数内部
GDB调试C++代码

五、打印变量

1、命令:p m_cliSocket
说明:打印m_cliSocket,十进制格式
2、命令:p/x m_cliSocket
说明:打印m_cliSocket,十六进制格式
3、命令:p/t m_cliSocket
说明:打印m_cliSocket,二进制格式
4、命令:p/o m_cliSocket
说明:打印m_cliSocket,八进制格式
GDB调试C++代码

六、退出

1、命令:q
说明:退出GDB调试,根据提示选y则退出
GDB调试C++代码

七、其他常用命令

1、在文件中某一函数处设置断点:b TcpClient.cpp:TcpClient::SenMsg
2、直接运行到下一个断点:c
3、查看调用堆栈:bt
GDB调试C++代码

4、删除断点:d 5
说明:5为断点序号,如果不加5则提示是否删除所有断点
GDB调试C++代码