- 博客(223)
- 资源 (20)
- 问答 (1)
- 收藏
- 关注
原创 eventpp 全面教程(从入门到实战)
本文介绍了轻量级C++事件分发库eventpp的使用教程。eventpp专注于事件回调管理,支持C++11及以上标准,无需外部依赖。主要内容包括: 环境准备:编译器要求支持C++11,通过头文件集成使用。 核心概念:EventBus(事件总线)、Event(事件类型)、Callback(回调函数)三大组件。 基础用法: 定义事件类型(推荐枚举) 创建事件总线模板实例 注册多种回调(普通函数/Lambda/成员函数) 触发事件分发 动态注销回调 eventpp通过简洁的API实现了模块解耦和回调管理,适合需要
2025-12-22 17:55:18
531
原创 Windows下dump分析工具介绍
摘要:Windows下分析dump文件需使用专业工具和方法,常用工具包括WinDbg、DebugDiag等微软官方工具,以及Visual Studio、任务管理器等系统工具,还有ProcDump等第三方工具。关键在于正确设置符号文件路径,使用WinDbg的!analyze -v命令初步分析,并结合源代码深入排查。分析流程包括信息收集、初步分析、深入排查和数据保留。确保使用匹配的.exe和.pdb文件,必要时主动捕获dump文件以提高诊断效率。
2025-11-08 15:10:33
873
原创 Crashpad 在windows下编译和使用指南
本文详细介绍了在Windows下为应用程序集成Crashpad崩溃捕获系统的完整流程,包括编译环境准备、源码获取与编译、项目集成方法和调试分析技巧。主要内容涵盖:通过Git获取Crashpad源码并使用GN/GYP构建;将编译生成的库文件链接到项目中;关键初始化代码实现;Qt项目配置要点;测试崩溃捕获和dump文件分析方法。文章特别强调了路径设置、符号文件管理、运行时库匹配等注意事项,并提供了解决常见编译错误的方法,为开发者实现可靠的崩溃报告机制提供了全面指导。
2025-11-01 15:41:28
1275
原创 Crashpad介绍
摘要: Crashpad是Google开发的跨平台崩溃报告系统,旨在提供高可靠性的进程外崩溃捕获与报告机制。其核心设计包括进程外监控(Client-Handler架构)、全面的Minidump文件生成,以及跨平台支持(Windows/macOS/Linux)。关键组件为客户端、独立Handler进程和崩溃报告数据库,协同完成崩溃捕获、存储及上传流程。Crashpad已被Chromium、Dropbox等大型项目采用,解决了混合语言环境下的崩溃诊断难题。相比前代Breakpad,它在macOS兼容性和稳定性方
2025-11-01 11:25:03
1399
原创 无法生成dump——MiniDumpWriteDump 阻塞原因分析
MiniDumpWriteDump需要在目标进程的线程配合下完成工作,但当这些线程本身处于不可中断状态时,就形成了"你要我配合,但我没法配合"的死局。就像交通警察想要处理一起车祸,但事故车辆把整条路都堵死了,连警察自己都过不去。预防:避免在敏感操作期间生成dump降级:准备简化的备用dump方案超时:设置合理的超时机制监控:实时监控进程状态,选择最佳时机理解了这些底层机制,你就能更好地处理这类棘手的崩溃排查场景了!
2025-10-25 15:49:10
536
原创 基于SEH的异常捕获与MiniDumpWriteDump深度解析
基于SEH的异常捕获与MiniDump生成技术解析 本文详细介绍了Windows平台下使用SEH(结构化异常处理)机制捕获异常并生成MiniDump的核心实现方案。系统架构包含异常捕获、Dump文件生成和处理结果决策三个主要阶段,通过EXCEPTION_POINTERS和MINIDUMP_EXCEPTION_INFORMATION关键数据结构实现组件交互。文中提供了完整的C++实现框架,包含异常过滤器设置、Dump文件生成、错误处理回退机制等核心功能模块,支持全内存转储和符号信息处理。该方案不仅能捕获未处理
2025-10-25 14:36:26
342
原创 Windows EXCEPTION_RECORD 结构深度解析
本文深入解析了Windows异常处理机制中的核心数据结构EXCEPTION_RECORD。该结构包含异常代码、标志、地址和参数等关键信息,其中异常代码采用32位值编码,包含严重性级别、客户定义标志和具体错误类型。常见的异常代码如访问违例(0xC0000005)、除零错误(0xC0000094)等均有详细说明。异常标志则控制异常的可继续性、栈展开状态等行为。理解该结构对于系统级调试和异常处理至关重要。
2025-10-18 16:22:02
983
原创 Windows结构化异常处理(SEH)深度解析:从原理到实践
Windows结构化异常处理(SEH)是系统底层的异常处理机制,分为硬件异常(如访问违规、除零)和软件异常。SEH通过链式结构(_EXCEPTION_REGISTRATION_RECORD)处理异常,每个线程都有一个异常处理链。异常分发时系统会遍历此链,直到找到合适的处理器。开发中可使用__try/__except编译器扩展语法实现保护,通过异常过滤器(GetExceptionCode)决定处理方式。高级应用可手动操作SEH链,修复上下文实现异常恢复。理解SEH对编写健壮程序和逆向分析至关重要。
2025-10-18 11:36:44
343
原创 Windows程序Dump文件生成全攻略:从原理到实战
本文介绍了Windows程序Dump文件生成的全方位指南。Dump文件作为程序崩溃时的"黑匣子",包含内存状态、线程信息和异常数据,是解决生产环境问题的关键工具。文章详细对比了Mini Dump、Full Dump和Heap Dump的特性及适用场景,并提供了多种生成方法:包括C++程序的SEH异常捕获实现、.NET应用的Dump生成方案,以及使用ProcDump工具进行外部监控(支持基于CPU、内存、异常等条件触发)。最后还介绍了通过任务管理器、注册表配置和调试工具生成Dump的方法,
2025-09-30 18:30:00
724
原创 C++面试11——指针与引用
C++指针与引用的核心区别在于:指针是存储地址的实体变量,可重定向且可为空;引用是变量的别名,必须初始化且不可为空。指针传递的是地址副本,而引用直接操作原始变量。使用引用更安全简洁,但指针更适合动态场景。面试中常考察指针运算、内存管理陷阱等,需注意悬垂指针/引用问题。现代C++推荐使用智能指针管理内存。理解这些差异对编写高效安全代码至关重要。
2025-09-25 19:17:04
742
原创 Windows程序崩溃排查简易指南
Windows程序崩溃排查指南:从Dump文件到问题代码 本文系统介绍了Windows程序崩溃的排查方法,按照"现场保护-证据收集-分析-定位"的流程展开。首先解释了程序崩溃的技术本质是非法操作触发系统异常。接着详细说明了如何设置系统自动生成Dump文件这一关键证据,并介绍了事件查看器和进程监控工具等辅助手段。核心部分重点讲解了使用WinDbg分析Dump文件的步骤,包括符号配置、自动分析命令和关键信息解读。最后指导如何结合PDB文件在Visual Studio中精确定位问题代码行。文章
2025-09-23 18:46:29
1119
原创 C++面试10——构造函数、拷贝构造函数和赋值运算符
摘要:本文从C++面试角度深入解析构造函数、拷贝构造函数和赋值运算符的区别。构造函数用于对象初始化,拷贝构造函数用于对象克隆(需注意深浅拷贝问题),赋值运算符用于对象赋值(需处理自赋值情况)。文中通过代码示例说明三者调用时机和实现要点,并强调Rule of Three/Five原则。核心区别在于:构造函数创建新对象,拷贝构造函数用现有对象初始化新对象,而赋值运算符则是修改已存在对象的值。掌握这些概念对编写安全、健壮的C++代码至关重要。
2025-09-06 22:02:43
888
原创 C++面试9——多继承陷阱与适用场景
C++多继承特性深度解析:面试重点与最佳实践 摘要:C++多继承虽强大但危险,主要面临三大问题:菱形继承导致的二义性、名字冲突和指针转换复杂性。虚继承可解决菱形继承问题,但会增加内存开销。适用场景包括接口继承、Mixin模式和平台适配层。面试常考察dynamic_cast工作原理、函数名冲突解决方案等。现代C++推荐优先使用组合而非继承,遵循接口隔离原则,或采用CRTP模式替代多继承。理解多继承的内存布局和陷阱对开发复杂系统至关重要,但应谨慎使用以避免维护性问题。
2025-08-07 18:17:31
339
原创 C++面试8——虚函数表(vtable)
C++虚函数表(vtable)深度解析:面试与实战必知要点 摘要:虚函数表是C++实现多态的核心机制,本文深入解析其内存布局与工作原理。关键点包括:1)虚函数表在编译时生成,运行期初始化vptr;2)多继承下存在多个vptr;3)常见陷阱如对象切片、构造/析构顺序、虚析构缺失等导致的崩溃风险;4)调试技巧与面试回答策略。掌握vtable机制能提升对C++多态的深入理解,避免实际开发中的常见错误。文章提供了内存布局图示、代码示例及解决方案,帮助开发者全面把握这一重要特性。
2025-07-24 18:30:15
619
原创 C++面试7——继承与多态
摘要:C++面试中继承与多态的核心考点解析。继承要点:is-a关系、访问控制、切片问题、构造顺序及名字隐藏;多态要点:虚函数机制、虚析构必要性、默认参数陷阱。重点对比继承与组合的适用场景,强调多态用继承、复用代码用组合的原则。面试需掌握虚函数原理、override用法及构造/析构时的虚函数限制,注意动态绑定与静态绑定的区别。正确使用final和override关键字能体现代码规范,遵循Liskov替换原则是设计良好继承体系的关键。(150字)
2025-07-23 19:26:53
706
原创 C++面试6——类和结构体的区别和使用场景
C++中类(class)和结构体(struct)主要区别在于默认访问权限:class默认private,适合封装数据和行为;struct默认public,更适合纯数据聚合。class用于需要数据隐藏和复杂行为的场景,struct用于简单数据容器或与C兼容的情况。二者技术上几乎等价,但使用时应遵循语义约定——class强调封装,struct强调开放数据。关键选择标准是设计意图而非语法差异。
2025-06-24 17:16:12
454
原创 C++面试5——对象存储区域详解
《C++对象存储区域精要》深入解析了四大内存区域特性:栈区(自动管理,速度快但生存期短)、堆区(手动控制,易泄漏但灵活)、全局/静态区(程序生命周期)和常量区(只读安全)。文章强调栈对象的RAII优势、堆对象必须使用智能指针、全局对象初始化顺序问题等关键实践,并对比了各区域的性能差异(栈分配比堆快10-100倍)。通过典型错误示例和优化方案,揭示了内存管理的核心法则:理解对象生命周期和地域特性是避免内存问题、提升性能的关键。
2025-05-31 09:05:20
595
原创 C++面试4-sizeof解析
掌握`sizeof`的每个细节,相当于获得了窥探C++对象内存模型的X光机——既能诊断内存问题,又能优化性能瓶颈。在面试中,这不仅是技术能力的试金石,更是对候选人系统理解能力的终极考验。
2025-05-19 19:40:06
1180
原创 C++面试3——const关键字的核心概念、典型场景和易错陷阱
const关键字的核心概念、典型场景和易错陷阱,掌握const的每个细节,相当于拿到了C++类型系统的核按钮——既能保证代码安全,又能精准控制程序的每一块内存。
2025-05-19 14:05:50
560
原创 C++面试2——C与C++的关系
C与C++在编程范式和语法特性上存在显著差异。C语言是过程式编程的代表,强调算法流程,而C++支持多范式编程,包括面向对象、泛型和函数式编程。C++通过类实现封装、继承和多态,构建复杂的对象模型,而C只能通过结构体和函数指针模拟类似功能。在语法上,C++引入了模板、STL、智能指针等现代特性,提升了代码的抽象性和安全性。内存管理方面,C++通过RAII和智能指针实现半自动化管理,而C依赖手动操作。尽管C++在语法上部分兼容C,但两者在编程范式和工程实践上已发生本质变化。C适用于内核开发、嵌入式系统等场景,而
2025-05-18 20:15:00
1276
原创 C++面试1——C++程序员简历撰写指南(附模板)
本文为C++程序员提供了详细的简历撰写指南,包括核心结构、技术能力矩阵、项目经验、工作经历和教育背景的撰写要点。强调了简历中的技术栈分级、数字驱动、关键词植入和开源贡献的重要性,并提供了应届生和资深工程师的简历模板示例。此外,文章还列出了简历撰写时应避免的常见错误,如绝对化表述、模糊表达和技术栈堆砌,并建议根据目标公司调整技术侧重,以工程思维展现解决问题的能力。
2025-05-18 15:17:30
1167
原创 Glibc内存管理:从原理到实战的深度解剖
Glibc的内存管理是一个充满妥协的战场:它在多线程性能与内存效率之间走钢丝,在快速响应与长期稳定之间求平衡。glibc的内存管理是平衡的艺术,malloc_trim如同外科手术刀——精准但危险。它既要应对多线程高频分配的性能需求,又要避免内存碎片引发的OOM(Out-Of-Memory)灾难。真正的系统级优化需从内存分配模式重构入手,配合现代分配器,方能在内存的刀尖上跳出完美舞步。每个线程拥有独立的arena,大内存(≥128KB)通过。:仅当堆顶存在足够大的连续空闲内存时,通过。
2025-05-07 09:23:14
792
原创 《CUDA:解构GPU计算的暴力美学与工程哲学》
CUDA 的诞生,宛如在 GPU 发展史上划下了一道分水岭。它不仅赋予了 GPU 走出图形处理的 “舒适区”,投身通用计算的 “新战场” 的能力,更是一场对计算资源分配与利用逻辑的彻底重构。在这场技术革命中,CUDA 以它犀利的架构设计和精妙的技术原理,重新定义了高性能计算的边界。
2025-05-04 12:37:54
999
原创 GPU软硬件架构协同设计解析
GPU的软硬件协同设计体现了垂直整合创新硬件层面通过SM的模块化、存储层次化、互连高带宽化构建并行计算基石;软件层面借助编程模型抽象、编译器智能优化、运行时动态调度释放硬件潜力;协同机制则体现在计算流水线深度定制、内存访问模式匹配、能效跨层优化等关键技术上。这种“硬件功能固化+软件灵活调度”的范式,使得现代GPU在AI训练、科学计算等场景实现百倍于CPU的能效比。未来随着Chiplet、存算一体等技术的成熟,软硬件协同将向更细粒度、更高智能的方向演进,持续突破计算系统的性能边界。
2025-04-21 16:48:17
1272
原创 Wayland介绍
Wayland 是一种现代化的显示服务器协议,旨在替代传统的 X Window System(X11),为 Linux 和类 Unix 系统提供更高效、安全的图形显示管理。- 负责合成窗口、处理输入事件(鼠标、键盘等),直接通过 Linux 内核接口(如 DRM/KMS)管理显示。:客户端(应用)直接与 GPU 通信(如通过 OpenGL/Vulkan),减少中间层,提升性能。:专业工具(如 CAD)、游戏(输入延迟优化)和高级功能(色彩管理)仍需完善。:逐步取代 X11,成为 Linux 图形栈的标准。
2025-04-07 23:23:18
1207
原创 Xorg内存管理机制深度解析
Xorg 的内存缓存机制是客户端-服务器协作、硬件加速与软件策略结合的综合体系。客户端未正确释放资源(如SDL未调用关键Xlib函数)扩展模块的资源管理缺陷(XRender、Composite等)驱动层的内存回收延迟(尤其是闭源驱动)开发者需结合协议分析(xtrace)、资源监控(xrestop)和驱动级调试(dmesg)进行系统性诊断。理解Xorg内存管理的内在逻辑,是优化图形应用性能的关键基础。
2025-04-06 23:59:17
1276
原创 Xorg 内存上涨的根源探究
X11 后端资源释放不彻底•观测证据xrestop显示每次窗口操作泄漏 4 个 Misc 资源,对应 XIC(输入上下文)、Colormap Entries(调色板条目)、WM Atoms(窗口管理器原子)、Event Masks(事件监听器)。•代码缺陷SDL 的未完全调用XDestroyIC等函数,导致 Xorg 误判资源仍被引用,无法进入可回收状态。Xorg 的内存上涨问题本质是特定负载模式下系统设计边界的显现,需通过客户端-服务端-驱动的协同优化解决。非必要避免频繁创建关闭窗口,如若需要则。
2025-04-06 23:36:30
992
原创 Xrestop介绍
是调试 Xorg 性能问题的实用工具,尤其适用于排查内存泄漏或资源占用异常的图形应用程序。通过实时监控 X Server 的资源分配,可以快速定位问题源头,辅助优化系统性能。,但专注于显示 X Server 的资源分配细节(如内存、窗口、Pixmap 等)。的命令行工具,类似于系统资源监控工具。
2025-04-05 11:25:59
651
原创 SDL多窗口多线程渲染技术解析
尽管在特定环境(如Linux + 特定驱动组合)下多线程Present可能暂时正常工作,但这种行为违背了SDL的跨平台设计哲学,可能在未来更新或更换硬件时引发难以调试的问题。对于高性能多线程渲染需求,更安全的做法是将**渲染命令录制与Present提交分离**,**规避窗口系统协议和图形驱动的线程安全隐患**,通过主线程协调实现帧同步。建议仅在以下场景使用此架构:- 纯 Linux 部署环境- 窗口数量较少(≤8)- 无需跨窗口资源共享对于跨平台或大规模窗口场景,尤其生产环境下,仍建议采用主
2025-03-30 20:59:02
981
原创 cppcheck使用
cppcheck是一个静态代码检查工具,支持c, c++ 代码;作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。执行的检查包括:自动变量检查数组的边界检查class类检查过期的函数,废弃函数调用检查异常内存使用,释放检查内存泄漏检查,主要是通过内存引用指针异常STL 函数使用检查代码格式错误,以及性能因素检查。
2023-07-27 23:55:04
744
原创 protobuf踩过的坑
protobuf踩过的坑proto文件生成C++枚举没有那么干脆,不像C++原生枚举定义简洁变量命令不能包含_下划线- 开发者指南[翻译] ProtoBuf 官方文档(二)- 语法指引(proto2)[翻译] ProtoBuf 官方文档(三)- 语法指引(proto3)[翻译] ProtoBuf...
2019-04-20 10:04:59
3242
1
转载 C++/CLI问题集锦 FAQ
C++/CLI中的const literal initonly 友元C++/CLI中的constVisual C++并不允许在const对象上调用成员函数,除非该成员函数也被声明为const。 C++/CLI托管代码中,无法把任何类型的函数声明为const;但可以把一个对象声明为const;然而由于无法编写const函数,这种const对象也几乎没有办法进行操作。 ...
2019-01-05 16:34:52
764
转载 Effiective Debugging——通用的工具和技术
用Unix命令行工具对调试数据进行分析用Unix命令来获取、帅选、处理并汇总文本记录,从而实现对调试数据的分析 把Unix命令用管道连接起来,可以迅速完成很多复杂的分析任务掌握命令行工具的各种选项及习惯用法通过grep命令的各种选项对搜索的结果进行逐步帅选 对程序的标准错误端进行重定向,以便于分析 用tail-f命令来监控内容持续增加的日志文件用编辑器对调试程序时所需的数据进行浏...
2018-08-28 18:36:55
248
转载 Effective Debugging——通用的方法与做法
相信自己能够把问题调试好确信问题是可以追查并解决的 给调试工作留出足够的时间 安排好工作环境,是自己不受干扰 遇到难题的时候可以先睡一觉 不要彻底放弃 投入精力去学习环境、工具及知识高效地重现程序中的问题如果能够准确重现程序中的问题,那么我们的调试过程就得以简化 创建一个简短且自足的范例,以便重现程序中的问题 设法创建一套可以制作副本的执行环境 采用版本控制系统给特定的软...
2018-07-17 19:35:19
479
A lightweight C++ library for reading and writing PCD files,consisting only of header files
2025-12-06
基于Crashpad简单封装 C接口
2025-12-06
SDL窗口绘制封装类+demo.zip
2025-04-27
SDL多窗口多线程渲染技术解析
2025-03-31
glog-0.3.4
2016-07-01
CPictureEx类
2011-03-19
glog不可跨dll项目使用
2016-11-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅