- 博客(203)
- 收藏
- 关注
原创 【SVN 详细使用指南:从入门到团队协作】
checkout:第一次下载项目update:获取服务器最新代码status:查看本地状态diff:查看具体修改add:添加新文件delete:删除文件commit:提交修改revert:撤销未提交修改log:查看提交记录resolve:解决冲突先 update→ 再修改→ 查看 status→ 检查 diff→ 再次 update→ 解决冲突→ 编译测试→ 最后 committrunk:主干branches:分支tags:发布标签merge:合并修改。
2026-07-23 17:43:20
424
原创 【C++ 第七阶段:模板、泛型编程与工程综合详解】
泛型编程的核心不是“少写几个函数”,而是:把算法中真正变化的部分抽象为参数,把不变的逻辑保留下来。从哪里开始?在哪里结束?如何判断目标?vectorlistdeque数组自定义容器std::find(target类型参数值参数行为参数template<T是元素类型;Capacity是编译期容量;Compare是比较策略。编译时,编译器可以直接生成的机器代码。可以自己实现一个简化版is_pointer。false;
2026-07-21 10:36:05
184
原创 【C++ 第六阶段:现代 C++ 常用特性、异常体系与 IO 流详解】
public:file,line,message),private:文件;行号;配置键;错误码;操作名称。auto。
2026-07-21 10:17:36
153
原创 【C++ 第五阶段:多线程、锁、条件变量、原子操作与死锁】
进程可以简单理解为一个正在运行的程序实例。虚拟地址空间;全局变量;堆内存;文件句柄;系统资源。两个不同进程通常不能直接访问对方的普通内存。线程是进程内部的一条执行路径。全局变量;堆内存;静态变量;文件、窗口、Socket 等进程资源。调用栈;局部变量;寄存器状态;当前执行位置。这也是多线程既方便又危险的原因。共享内存让线程之间传递数据很快,但只要多个线程同时修改同一份数据,就可能发生并发错误。死锁是多个线程互相等待对方释放资源,最终全部无法继续执行。
2026-07-21 09:57:58
209
原创 【C++ 第四阶段:继承、多态与面向对象接口设计】
继承用于描述类型之间的“是一种”关系,也就是is-a关系。U 盘设备是一种设备;文件日志输出器是一种日志输出器;按钮是一种界面控件。C++ 中,被继承的类称为基类,继承基类的类称为派生类。Device是基类;UsbDevice是派生类;public表示公有继承。派生类对象中包含一份完整的基类子对象,同时还包含派生类自己增加的成员。UsbDevice 对象├── Device 基类部分└── UsbDevice 自己的部分派生类指针或引用转换为基类指针或引用,称为向上转换。
2026-07-20 18:10:40
146
原创 【 C++ 系统第三阶段:STL 容器、迭代器、Lambda 与算法】
分析数据特征↓选择合适容器↓使用迭代器描述区间↓使用 Lambda 描述条件↓使用 STL 算法处理数据↓理解容器修改后的失效规则LogManager功能使用的知识保存日志vector添加日志push_back、移动语义按 ID 查找find_if删除指定日志find_iferase按级别筛选copy_if按级别统计count_if判断错误日志any_of按时间排序sort多条件排序比较器、严格弱序删除空消息保护内部数据private、类不变量只读查询const正确性继承。
2026-07-20 15:33:51
219
原创 【C++】从裸指针到 `std::unique_ptr`:用 `FileSession` 理解现代 RAII
在第一阶段中,我们手动实现了一个资源管理类。文件资源:FILE*缓冲区资源:char*构造函数中申请资源;析构函数中释放资源;禁止拷贝;实现移动构造;实现移动赋值;移动后清空源对象;构造失败时手动清理已经申请的资源。这些代码帮助我们理解了 RAII、资源所有权和移动语义,但也暴露出一个问题:手动管理资源需要编写大量容易出错的清理代码。第二阶段的目标,就是使用现代 C++ 提供的,把缓冲区从手动管理改造成自动管理,并进一步让FILE*也由 RAII 对象负责关闭。
2026-07-16 14:16:44
236
原创 【C++】 从裸指针到 RAII:手写一个安全的 C++ 文件资源管理类
通常翻译为:资源获取即初始化。RAII 的核心思想是:将资源的生命周期绑定到对象的生命周期。创建 FileSession 对象↓申请缓冲区↓打开文件FileSession 对象离开作用域↓调用析构函数↓关闭文件↓释放缓冲区// 使用文件session会自动销毁。这就是 RAII。第一阶段的重点不是记住移动构造函数的固定写法,而是理解资源所有权。对于当前的一个文件资源只能有一个拥有者一块缓冲区只能有一个拥有者禁止拷贝,是为了防止多个对象错误地共同释放同一资源。
2026-07-15 15:28:46
243
原创 从零入门 WinDbg:手把手分析 C++ 崩溃 Dump(超详细实战版)
Dump 文件(后缀.dmp程序崩溃那一刻的完整现场快照。崩溃线程 + 调用栈CPU 寄存器状态异常类型与错误码内存数据(栈、堆、模块)加载的 DLL/EXE 模块信息哪怕程序已经退出,WinDbg 依然能通过 Dump 文件,还原出崩溃时的每一个细节。只能看到一堆内存地址,完全看不懂。00301d7f770ca18c没有加载 PDB 文件。PDB(程序数据库)本质是「地址翻译表」哪个函数源码的哪一行哪个局部变量/全局变量没有 PDB:只能看地址,完全无法定位源码。
2026-05-15 15:53:59
393
原创 WinDbg 符号路径命令详解:`.sympath`、`.symfix` 与 `.reload`
reload.reload.reload /flmlmvm 模块名设置符号路径重新加载符号检查模块符号状态再开始分析调用栈和异常->!WinDbg 的符号配置就基本入门了。
2026-05-15 12:18:11
461
原创 【VS2008 中文注释导致 C4819 和大量语法错误的解决方法】
遇到 VS2008 的C4819,不要急着改 C++ 代码。它通常是在提醒你:源码编码和当前系统代码页不兼容。先看第一条 warning,尤其是C4819。检查源码是否包含中文注释、中文字符串或其他非 ASCII 字符。检查文件是否是 UTF-8 无 BOM。将文件转成 UTF-8 with BOM 或 GBK/ANSI。重新编译确认错误是否消失。如果源码需要中文注释:保存为 UTF-8 with BOM 或 GBK/ANSI。
2026-05-15 11:54:34
393
原创 【WinDbg 入门:用 C++ 自动生成 Dump,并学会分析崩溃现场】
这篇文章的核心不是让你记住所有 WinDbg 命令,而是建立完整的调试思路。程序注册异常处理函数↓程序发生崩溃↓异常处理函数拿到异常现场↓MiniDumpWriteDump 生成 Dump↓WinDbg 打开 Dump↓加载 PDB↓!analyze -v 看异常类型↓.ecxr 切换异常现场↓kv 查看调用栈↓dv 查看局部变量↓lmvm 查看模块和符号状态能让程序自动生成 .dmp 文件能用 WinDbg 打开 .dmp 文件能加载正确的 PDB能用!
2026-05-15 09:59:21
404
原创 【 VS2013 集成 Qt5.7.1 踩坑记录:moc/uic/rcc 报“系统找不到指定的路径”怎么解决?】
系统找不到指定的路径MSB6006: cmd.exe 已退出,代码为 3但本质上是 VS2013 在调用 Qt 的工具时失败了。mocuicrccQt 的 bin 目录没有加入系统 Path到系统环境变量。同时,VS2013 + Qt5.7.1 是比较老的组合,项目路径一定要尽量保持纯英文、无空格、无特殊字符。先保证 Qt Options 配对,再保证 Qt bin 在 Path 里,最后保证项目路径纯英文。
2026-05-14 19:00:01
442
原创 【 Codex AGENTS.md 与 Claude CLAUDE.md:配置差异、使用方法和本质】
AGENTS.md和CLAUDE.md的区别,不是文件名的区别,而是上下文组织方式的区别。AI 编程代理进入项目时,如何获得稳定上下文。始终相关 -> AGENTS.md / CLAUDE.md任务相关 -> Skills权限相关 -> .rules执行相关 -> Hooks角色相关 -> 多智能体当你理解这套分层后,Codex 和 Claude Code 就不再只是两个“聊天式编程工具”,而是可以被配置、复用、审计和持续改进的工程系统。
2026-05-13 17:59:32
1227
原创 【Codex 使用教程:从项目规则、Skills、Rules 到 Hooks】
Codex 的真正用法,不是不断写更长的 prompt。项目长期规则 -> AGENTS.md可复用任务流程 -> Skills命令权限控制 -> .rules生命周期自动化 -> Hooks学习过程沉淀 -> 每日记录和博客当这些机制配合起来时,Codex 才不只是“会回答问题的 AI”,而是一个能够理解项目规则、执行工作流、自动记录过程、持续沉淀知识的开发协作系统。
2026-05-13 17:57:44
2902
原创 【Windows 批处理乱码问题:BAT 编码和 CMD 代码页真的会坑你】
echo offtitle 目录复制 / 备份工具echo Windows 目录复制工具echo.set /p "SRC=请输入源目录,例如 G:\ 或 D:\a:"set /p "DST=请输入目标目录,例如 H:\ 或 E:\b:"这次问题看起来是“中文乱码”,但本质上是:BAT 文件编码和 CMD 当前代码页不匹配。BAT 文件保存为 ASCII / ANSI 兼容格式脚本开头使用 chcp 936 >nul输入语句用 set /p "变量=提示内容"路径变量在命令里全部加双引号。
2026-05-13 17:51:42
402
原创 Qt QProcess 实战用法详解,对比MFC/ATL/duilib一看就懂
将复杂的进程管理(启动、通信、监控)封装成简单的类,一行代码实现 MFC 几十行的功能,同时支持跨平台,大幅提升开发效率、降低 bug 率。适用场景:只要是 Qt 项目,需要启动外部程序、执行命令、获取输出、双向交互,都优先用 QProcess,无需自己写底层代码。与 MFC/ATL/duilib 的本质区别:QProcess 是“一站式进程管理工具”,而 MFC/ATL/duilib 是“界面开发框架/库”,进程管理需手动调用底层 API,没有封装好的专用类。
2026-03-30 21:06:57
443
原创 【 C++内存管理完全指南:从入门到精通】
当C/C++程序运行时,操作系统会为进程分配一块连续的虚拟地址空间,这块空间被划分为五大区域。理解这些区域的存储内容和特性,是掌握内存管理的基础。重要概念:用户空间是开发者重点关注的区域,内核空间由操作系统管理,用户代码无法直接访问。函数功能特点malloc申请内存仅开辟空间,不初始化calloc申请内存开辟空间并初始化为0realloc调整内存对已分配空间扩容/缩容free释放内存释放堆空间这是new/delete与malloc/free的核心区别!new:先开辟空间 → 再调用构造函数。
2026-03-27 11:26:35
243
原创 【OpenClaw 源码分析】OpenClaw卸载Uninstall技术分析
OpenClaw 的卸载功能分为两个独立的子系统:本文档聚焦于 主程序卸载 的完整执行链路分析。各阶段删除内容详细表格阶段范围删除内容目录路径 (Windows 示例)5serviceGateway 服务 (launchd/systemd/schtasks)macOS: Linux: Windows: 计划任务 “OpenClaw Gateway”删除方式: 5service启动项 (Windows fallback)Windows: 删除方式: (文件删除
2026-03-24 17:45:03
589
原创 【Git学习笔记:手把手教你玩转版本控制】
改代码 → add → commit → push记住这个顺序,就能玩转版本控制。刚开始可能会觉得麻烦,但当你需要回溯历史、团队协作时,你会庆幸自己学会了Git。
2026-03-18 14:10:03
209
原创 【Git版本控制完全指南:从入门到团队协作】
分支就像你玩游戏时的"存档位"。主分支(main)是稳定版本,你可以在其他分支上开发新功能、修复bug,完成后再合并回来。即使开发失败,删除分支即可,不会影响主版本。Git是现代开发的必备技能,它让代码管理变得简单高效。修改 → add → commit → push。多练习多用,自然就能熟练掌握。刚开始可能会觉得麻烦,但当你需要回溯历史、团队协作时,你会庆幸自己学会了Git。
2026-03-18 11:56:52
469
原创 【零基础配置 Claude Code 状态栏 完整教程】
Claude Code 状态栏核心是通过指定自定义脚本,脚本需依赖jq解析 JSON 数据;配置流程:安装jq→ 创建脚本 → 配置→ 重启生效;跨机器迁移只需复制脚本和配置文件,确保新机器安装jq并赋予脚本执行权限即可。通过以上步骤,你可以快速配置个性化的 Claude Code 状态栏,且能轻松迁移到任意机器。
2026-03-12 10:23:11
1430
原创 【Claude code teams】Claude code teams和subagent的区别
Claude Code 提供的两种多智能体协作模式为开发工作带来了全新的可能性。子智能体模式适合快速处理简单任务,而智能体团队模式则能够应对复杂的工程挑战。核心建议任务简单且无需协作时,选择子智能体模式任务复杂且需要多角色沟通时,选择智能体团队模式在实际项目中,可以根据任务阶段灵活切换模式通过合理使用多智能体协作,开发者可以显著提高开发效率,降低复杂度,专注于更有价值的工作。
2026-03-10 18:33:53
1031
原创 【Qt入门:从运行机制到界面开发的全新视角】
理解了运行机制和内存管理,现在来看具体的代码实现。自定义窗口类需要继承QWidgetQ_OBJECT // 启用元对象系统public:private:// 成员变量传统顺序本文顺序main.cpp入口事件循环(程序为何持续运行)widget.h类定义对象树(内存管理核心).pro配置坐标体系(布局基础)控件创建自定义窗口类坐标体系控件实现对象树工程配置核心理念:先理解"为什么",再学习"怎么做"。当你理解了事件循环,就明白Qt程序的生命力来源;
2026-03-10 14:11:19
447
原创 【Claude Code 实战技巧手册:开发工作流全流程指南】
技巧用途推荐度@文件引用精准指定上下文⭐⭐⭐⭐⭐!执行命令终端集成⭐⭐⭐⭐⭐双击 Esc回退对话⭐⭐⭐⭐⭐/plan规划模式⭐⭐⭐⭐Shift+Tab自动接受⭐⭐⭐⭐Ctrl+C取消操作⭐⭐⭐⭐/commit自动提交⭐⭐⭐⭐/compact压缩上下文⭐⭐⭐⭐/init自动初始化⭐⭐⭐⭐/context查看上下文⭐⭐⭐/clear清除会话⭐⭐⭐/help帮助命令⭐⭐⭐Ctrl+G打开编辑器⭐⭐⭐Ctrl+B后台运行⭐⭐⭐。
2026-03-09 18:07:35
1274
1
原创 【C++类和对象下篇:深入理解面向对象的核心进阶特性】
/ 普通对象A();// 匿名对象:当前行执行完立即析构A aa2(2);// 普通对象// 匿名对象的经典使用:调用类的成员函数,无需定义命名对象return 0;本文详细讲解了C++类和对象下篇的七大核心知识点,其中初始化列表static成员友元知识点核心要点初始化列表。
2026-03-09 17:47:31
382
原创 【C++操作INI文件函数详解:全面指南与实战技巧】
INI文件是被动的纯文本配置,键值对不会凭空生成,必须通过SetInt主动写入才能存在;GetInt仅负责读取已存在的键值,无写入则无数据源,只能返回默认值;两者是"写-读"的单向依赖,SetInt是GetInt读取到有效数据的必要前置条件。GetIntValue函数详解函数用于从INI文件中读取整数配置值。const char* aSection, // 节名const char* aKey, // 键名long aDefault = 0, // 默认值(找不到键时返回)
2026-03-09 16:15:13
432
原创 INI 配置文件实战:ATL/duilib/Win32/Qt 完整工程
object,uuid(12345678-1234-1234-1234-1234567890AB), // 替换为自己的GUID(VS可生成)dual,[id(1), helpstring("获取字符串配置(section=节名,key=键名,defaultValue=默认值)")][id(2), helpstring("设置配置值(section=节名,key=键名,value=值)")][id(3), helpstring("获取窗口宽度(从Window节读取Width键)")]
2026-03-03 16:43:39
681
原创 INI 文件超详细入门到实战教程
INI 是的缩写,中文叫初始化文件,本质是纯文本配置文件.ini(最标准).conf.cfg(也常见,本质一样)它不包含可执行代码,只存“键=值”形式的配置信息,程序启动时读取,运行时使用。INI 是纯文本、轻量、简单的配置文件。节、键值对、注释。key=value,不要加引号。所有键值对必须属于某个节。节名、键名不要重复。Python 用,5 行代码读完。C++ 推荐自己写极简解析器 或 使用inih。不要明文存密码。编码永远用UTF-8。
2026-03-03 16:29:00
1625
原创 玩转Claude Code:从安装到高阶配置的全维度指南
核心高频命令claude(交互)、claude -p(单次查询)、claude -c(续连对话)覆盖80%日常场景;模式选择:默认模式保安全,自动模式提效率,规划模式做设计;高阶提效/memory持久化上下文,/hooks实现自动化流程,SubAgent隔离专业任务;安全原则:Hooks命令避免危险操作,仅用于本地测试,生产环境禁用。通过以上配置和命令,你可以充分发挥Claude Code的能力,将AI融入代码分析、调试、格式化等全流程,大幅提升开发效率。
2026-03-02 12:04:27
1572
原创 Nmap OS识别执行流深度解析:从main函数到指纹匹配的完整调用链
public:// 构造函数:传入待扫描目标列表// 析构函数:释放资源// 扫描开始时间// 未完成OS扫描的主机链表(核心容器)// 获取未完成主机数量// 按地址查找未完成主机// 获取下一个未完成主机(循环遍历)// 重置主机迭代器// 移除已完成扫描的主机private:// 初始目标主机数量// 循环迭代器(私有,保证安全)函数位于 Nmap 源码的osscan2.cc。
2026-03-02 10:19:30
623
原创 【Nmap源码分析】Nmap osscan2 深度技术解析:操作系统指纹识别引擎的核心实现
在网络安全领域,准确识别目标主机的操作系统是渗透测试、漏洞评估和网络资产管理的核心需求。不同操作系统对 TCP/IP 协议栈的实现存在细微差异,这些差异构成了识别的"指纹"。Nmap 的 osscan2 模块通过发送精心构造的探测包,分析目标返回的响应,提取以下关键特征:这些特征组合形成唯一的"指纹",与 数据库进行匹配,从而识别目标操作系统。osscan2 采用事件驱动 + 状态机架构,核心流程如下:是否os_scan_ipv4 入口初始化 OsScanInfo构建未完成主机列表初始化 pcap 抓包主
2026-02-28 11:40:31
629
原创 Windows编程深度解析:窗口关闭后进程残留的完整排查指南
核心逻辑:进程的存活取决于"是否有运行的线程",只要有一个线程在跑,进程就不会销毁解决关键:给后台线程设置"退出标记",在窗口销毁时修改标记,让线程主动退出循环,再用等待线程结束避坑要点:不要用强制终止线程,优先用"主动退出"的方式,避免资源泄漏最核心原因:消息循环未收到WM_QUIT(漏写、消息循环写法错误)高频原因:后台线程是无限循环且无退出逻辑,窗口关闭后线程仍在运行其他原因:定时器/钩子未销毁、内核句柄未释放、控制台输入阻塞等进程的存活取决于是否有未终止的线程或未释放的核心资源。
2026-02-26 09:42:13
551
原创 【Vscode插件开发教程】VSCode插件开发入门指南:从C++开发者的视角
项目结构:VSCode插件项目包含清单文件、源代码、配置文件等,类似于C++项目的结构核心文件定义插件元数据,extension.ts实现核心逻辑插件架构:基于事件驱动的架构,通过激活/停用生命周期管理插件实现逻辑:使用命令注册、Disposable模式、上下文对象等机制实现功能开发流程:编写TypeScript → 编译 → 调试 → 发布类型系统:TypeScript的静态类型系统与C++相似资源管理:Disposable模式类似于RAII模块化。
2026-02-12 17:19:25
678
原创 【 C++类与对象中篇】六大默认成员函数深度解析
编译器生成的默认构造函数,不会对内置类型(int/char等)进行初始化,内置类型成员会保持随机值;但会对自定义类型成员自动调用其默认构造函数完成初始化。C++11补丁内置类型成员变量在类中声明时可以直接给默认值。private:// C++11:内置类型声明时给默认值Time _t;// 自定义类型,调用其默认构造函数Date d1;// _year/_month/_day被初始化为1970/1/1,_t调用Time的默认构造不会处理内置类型(内置类型直接由编译器回收内存)会对。
2026-02-12 12:02:06
771
原创 【nmap源码分析】Nmap OS扫描模块核心代码深度解析
/ 目标索引:遍历Targets列表时的循环变量// Host 容器指针:指向单个主机的OS扫描信息对象// 超时的目标计数:统计被过滤的超时目标数量// 记录当前时间(用于超时判断):获取系统当前时间,存入成员变量now// 初始未完成目标数量:初始化待扫描目标的计数:这是Linux系统调用,获取当前的秒数和微秒数,用于后续判断目标是否超时。该函数将时间信息存储在成员变量now中,为后续的超时判断提供时间基准。:这是类的成员变量,最终会记录"真正进入扫描队列的目标数量"。
2026-02-12 09:39:55
644
原创 【windows核心编程6】MFC入门框架知识详解
类名定位核心作用对应Win32概念CWinApp应用程序类基类管理程序生命周期、封装消息循环、程序入口WinMain函数 + 消息循环CFrameWnd框架窗口类基类封装窗口操作、承载UI元素、处理窗口消息窗口(HWND) +等API它们是MFC"面向对象封装Windows API"的核心体现,通过这两个类,开发者可以用更少的代码实现Win32程序的功能。核心执行流程程序启动 → 实例化全局CWinApp对象 → MFC调用InitInstance() →。
2026-02-11 14:47:49
504
原创 【windows核心编程5】Windows消息机制详解:从底层原理到MFC应用
Windows消息机制是Windows平台程序运行的核心底层逻辑,也是MFC开发的基础。四大核心概念:SDK与API、窗口与句柄、消息与消息队列、WinMain函数完整消息处理流程:系统投递消息→应用取消息→应用处理消息的6步闭环Windows编程模型:定义WinMain→创建窗口→编写消息循环→编写窗口过程函数MFC的封装原理:MFC是对Windows消息机制的面向对象封装,理解底层机制才能更好地使用MFC线程与消息队列:消息队列是线程级资源,主线程自动创建,子线程需手动创建。
2026-02-11 14:17:55
581
原创 【windows核心编程4】MFC结构详解:从工程文件到消息机制全面解析
sln- 解决方案入口.vcxproj- 工程编译配置- 文件结构这三个文件丢失会导致项目「散架」,无法正常打开和编译。.sdf.suo.aps- 辅助文件,VS会自动重建.ncb- 自动完成出问题时可删除重建在Windows系统中,窗口消息是应用程序与操作系统、用户交互的核心通信方式。当用户点击鼠标、按下键盘、调整窗口大小,或系统状态发生变化时,操作系统会向目标窗口发送一条"通知",这就是消息。每个窗口都有一个专属的窗口过程函数(Window Procedure),负责接收并处理这些消息。
2026-02-11 14:08:43
749
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅