Bug调试1.0

目录

自定义错误码枚举体

man手册的查询范围

[为什么 man Json::Reader::parse 找不到?](#为什么 man Json::Reader::parse 找不到?)

非静态成员引用必须与特定对象相对

两个头文件相互包含?

服务端Listen()段错误

🐉龙级dubug野指针错误

为什么不会崩溃?为什么在41的Listen()才报错?为什么在写入野指针的时候不会报错?VS2022?

回顾需函数调用机制

gdb查函数栈帧

Linux与WIn地址对比

[📊 Linux vs Windows 地址对比](#📊 Linux vs Windows 地址对比)

[recv()及一系列的void* buf参数](#recv()及一系列的void* buf参数)

头文件循环包含问题

错误码尽量打印


pthread_create()调用内部类函数虽参数、返回值符合格式但因:"域名访问限制,导致参数类型不符"。

解决办法:加static,去除域限定作用。

增:类内访问"域作用限定",必不可少!!

自定义错误码枚举体

man手册的查询范围

css 复制代码
w@instance-qhw6x01g:~CustomizeProtocol/$ man Json::Reader::parse
No manual entry for Json::Reader::parse

1.Linux系统调用。

2.C库函数。

3.系统管理命令。(像rm cd touch)

为什么 man Json::Reader::parse 找不到?

命令 查找范围 是否支持 C++ 类
man 系统手册(Section 1-8) ❌ 不支持(只有 C 函数)
man 3 printf C 标准库 ❌ 不支持 C++ 类
man std::string C++ 标准库 ❌ 大部分发行版不支持

非静态成员引用必须与特定对象相对

std::string::substr (0, pos)

原因:必须使用相应的实例对象来调用接口。不能匿名调用

两个头文件相互包含?

当代码量激增、文件数激增。一定要注意头文件相互包含的情况。

Protocol.hpp

cpp 复制代码
#pragma once
#include"../Package/Log.hpp"
#include<jsoncpp/json/json.h>
#include"Socket.hpp"
#include"../Package/Comn.hpp"
#include"Calculate.hpp"
#include<functional>

Calculate.hpp

cpp 复制代码
#pragma once
#include<string>
#include"Protocol.hpp"

服务端Listen()段错误

esc切到上窗口:"Space"打断点

i切到gdb窗口

两个参数 "r 8081"

s进入函数执行,n不进入

报错:

css 复制代码
(gdb) n
[2026-08-20 10:33:23] [INFO] [41339] [Socket.hpp] [40] - Bind完成

Program received signal SIGSEGV, Segmentation fault.
0x000055555555973e in SocketClass::TCPServerBuild (this=0x555555575ef0) at /home/w/e2026/Auguest/CustomizeProtocol/SocketCom/Socket.
hpp:41
41              Listen ();

🐉龙级dubug野指针错误

查了一晚上+1h

症状:问题出现在Listen()的调用上,调用不过去。就出现段错误的提示

1.检测继承、定义、声明问题。

2.检测拼写问题。

3.进入Socket()、Bind()主要查看_sockfd的定义问题。

4.求助AI

反思:debug路径错误,指针使用习惯不好(未及时初始化)。

InetAddr中未对成员char* _port; 及时初始化,导致野指针访问。

为什么报错位置偏移?(知识补充)野指针访问不应该直接报错吗?

这是标准的野指针格式 "x*VUUU" 。(为什么这么大?(即使是正常指针)这是因为Linux系统的原因)

strcpy执行后

"这是野指针赋值"

为什么不会崩溃?为什么在41的Listen()才报错?为什么在写入野指针的时候不会报错?VS2022?

这是因为Linux下区别于Win(的Dubug)它继续运行,是栈的继续使用(如上次的指针废弃后的复用)无法识别野指针!

回顾需函数调用机制

执行Listen()前:

在执行① 时就已经报错了!!

gdb查函数栈帧

bash 复制代码
info address TCPSocket::Listen()

Linux与WIn地址对比

📊 Linux vs Windows 地址对比

特性 Linux (64位) Windows (64位)
地址范围 0x555555555xxx 或 0x7fffxxxx 0x00007ff7xxxx 或 0x000001xxxx
典型堆地址 0x555555xxxxxx 0x000001xxxx
典型栈地址 0x7fffxxxxxxxx 0x000000xxxxx
典型大小 48 位有效地址 44-48 位有效地址

recv()及一系列的void* buf参数

void* buf参数指的是可以被按照字节流式填充的字段,因此就直接限定了纯粹数组。*string不行,因为其内部封装以指针、容量等。

头文件循环包含问题

解决此问题的基础知识:

1.类内成员函数编译时机------C++规定:类内成员函数体的编译时机是在该类的"};"之后进行的。(方便了类内函数体实现时机的灵活性)

2.头文件展开的性质:头文件是依次展开,我们可以假设哪个头文件先展开而后逐渐推理出完整链条。(而非并发什么的)

解决方法

1.方法解耦:即所用到的那个模块可不可以用无耦合文件内部实现。

2.前置声明(局限性):先让编译器认识"这是一个类的名字"。禁止做内部解析。

错误码尽量打印

cpp 复制代码
fprintf(stderr, "fail: %s (errno=%d, ret=%d)\n", \
            strerror(errno), errno, ret);
相关推荐
猫咪很可爱1 天前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
李永奉1 天前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦DNS通话算法后,大概率通话时蓝牙自动断连,RAM空间爆了问题处理
单片机·嵌入式硬件·mcu·物联网·电脑·bug
8年车载测试4 天前
车载测试中如何通过 Jira 平台提交 Bug:操作步骤与关键要点
bug·jira·uds诊断·hil测试·uds自动化测试·ecu刷写测试·canoe工具
硅基手札4 天前
SPI技术系列 13 · SPI 调试与排查
linux·运维·stm32·单片机·嵌入式硬件·bug
李永奉4 天前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦通话语音算法后,设置触摸音在唤醒语音助手和通话时触摸音没作用问题
单片机·嵌入式硬件·mcu·物联网·电脑·bug
kyle~6 天前
机器人通信 --- FANUC TCP 并发请求-响应错位 Bug 复盘
tcp/ip·机器人·bug
鬼手点金8 天前
Harness 工程:模型之外的竞争力
服务器·人工智能·深度学习·机器学习·bug
巴巴媛6669 天前
【Debug1】程序死机,while(1)循环,怎么办?
c语言·笔记·stm32·嵌入式硬件·bug
JosieBook11 天前
【多线程】两台机器同时抢一个字典:一次并发 Bug 的排查
java·网络·bug
鬼手点金12 天前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw