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);
相关推荐
今夕资源网20 小时前
OmniVoice 今夕整合包 本地语音TTS断网可用 修复了一些BUG 优化生成速度 极速秒生成
bug·语音克隆·omnivoice·断网可用·本地语音tts·语音tts
烧烧的酒0.o5 天前
Codex桌面版更新后不能使用最新模型问题-排查修复总结
chatgpt·bug
sg_knight6 天前
ZCode Bug 定位实战:把报错丢给 ZCode,它是怎么修的
llm·bug·agent·ai编程·glm·智谱·zcode
轩轶子7 天前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
鬼手点金7 天前
Claude Code示范案例-修复 Bug 工作流
java·服务器·前端·javascript·bug·openclaw
^Rocky16 天前
IT 疑难杂症诊疗室:复杂技术问题解决实录
运维·bug
Keven_1118 天前
Bug:UVA816
bug
Keven_1118 天前
Bug:UVA1103
bug
钱栈up19 天前
坯料管理导入功能bug修复:只改前端一个文件就解决问题
前端·bug
项目管理实用笔记19 天前
Bug跟踪管理系统有哪些?2026 推荐清单与选型指南
bug·研发管理·研发管理工具·项目管理软件选型