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位)
地址范围 0x555555555xxx0x7fffxxxx 0x00007ff7xxxx0x000001xxxx
典型堆地址 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);
相关推荐
iNeuOS工业互联网2 天前
iNeuOS工业互联网操作系统,重要更新:性能优化、安全漏洞与BUG修复,远程控制响应效率大幅提升
性能优化·bug
嵌入式学习菌3 天前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
缘友一世3 天前
dsh(0.1.5-rc.1)接入官方模型deepseek-flash图像输入不支持修复
bug·图片输入·deepseek-flash·dsh 0.1.5-rc.1
lovingsoft3 天前
AI测试中的对抗测试:从“找Bug”到“预演战争”
人工智能·bug
golang学习记5 天前
VS Code 新UI被曝重大bug:菜单栏消失了
vscode·bug
j7~5 天前
【软件测试】(概念篇)《需求的概念,测试用例(case),软件错误(bug),开发模型以及测试模型》---详解
软件测试·bug·敏捷模型·开发模型·测试模型·测试中需求的定义·软件的生命周期
冰水不凉6 天前
CodeX 在 Ubuntu 下 vscode 插件的 bug 问题
vscode·ubuntu·bug
flower_drop6 天前
基于 WebUSB 与 CDP:在浏览器端实现 Android 设备通信与无证书抓包实践
android·chrome·测试工具·adb·bug·edge浏览器
lytao1237 天前
90% 覆盖率不等于没 Bug:用风险配置测试组合
前端·javascript·bug·软件工程