GDB调试C++代码-条件断点与断点读写

GDB调试C++代码-条件断点与断点读写

一、条件断点

学习开源软件调试源码时,尤其是服务端程序,面对不同的客户端消息,经常需要消息过滤,此时就会用到条件断点。

条件断点格式:b 断点位置 if 条件表达式

以之前的TCP服务端代码为例,当客户端发送"hello"时,在服务端打印客户端发送内容前的代码处增加断点
1、开始调试并且添加断点:gdb --args ./Server 6000
添加断点:b TcpServer.cpp:98 if 0==strcmp(recvBuf,“hello”)
在这里插入图片描述
2、客户端发送示例:
(1)./Client 127.0.0.1 6000 “hello this is a client”
(2)./Client 127.0.0.1 6000 “hello”
在这里插入图片描述
3、服务端只有在收到"hello"时才会进入断点:
在这里插入图片描述

二、断点读写

学习开源软件调试源码时,经常需要分析软件调用流程。因为不会修改代码,所以可以将调试的断点保存到本地,后续重新调试时直接加载保存的断点文件即可,不用每次都重新输入断点。
以之前的TCP客户端代码调试为例

1、开始调试并且添加断点:gdb --args ./Client 127.0.0.1 6000 “hello this is a client”
添加两个断点:
(1)b 16
(2)b TcpClient.cpp:TcpClient::SenMsg在这里插入图片描述
2、保存断点到/tmp/client.break文件:save b /tmp/client.break
在这里插入图片描述
查看断点文件内容:
在这里插入图片描述
3、清空断点并且加载断点文件及查看断点:source /tmp/client.break
在这里插入图片描述

三、调试运行的进程

以TCP服务端为例
1、后台启动进程:nohup ./Server 6000 >> /dev/null 2>&1 &
2、查看进程ID:ps -aux|grep Server
在这里插入图片描述
3、调试运行进程并且设置断点:gdb attach 4653(进程ID)
(1)gdb attach 4653
(2)b TcpServer.cpp:98
(3)c(继续运行程序)
在这里插入图片描述
4、客户端发送示例:./Client 127.0.0.1 6000 “hello”
在这里插入图片描述
5、服务端运行情况:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值