Skip to content

Commit 96f9d27

Browse files
committed
[重构崩溃报告系统并增强跨平台兼容性]:优化崩溃处理模块并增强跨平台兼容性
-**Breakpad模块重构**: 采用Pimpl模式重新设计Breakpad封装类,增加崩溃回调机制和手动生成minidump功能,添加完整的单元测试和示例程序 -**Crashpad模块增强**: 同样使用Pimpl模式重构,改进错误处理和配置管理,新增崩溃报告服务器Python脚本用于接收和分析崩溃文件 -**字节序检测工具扩展**: 在ByteOrder模块中新增7种不同的字节序检测方法,包括联合体、位运算、C++20标准库等多种实现方式 -**构建系统优化**: 改进GitHub Actions工作流,支持macOS系统自动检测CPU核心数,确保跨平台测试效率 -**文档结构完善**: 重新组织README.md文档,采用模块化展示方式,详细说明每个模块的核心文件和功能特点 -**工具函数补充**: 在utils模块中添加字符串转换工具函数,增强Windows平台的宽字符串支持 -**代码质量提升**: 为各模块添加完整的单元测试,改进错误处理机制,统一代码风格和命名规范
1 parent 388512d commit 96f9d27

File tree

19 files changed

+1111
-203
lines changed

19 files changed

+1111
-203
lines changed

.github/workflows/build.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,11 @@ jobs:
7171
7272
- name: Run tests
7373
shell: bash
74-
run: cd ${{ env.BUILD_DIR }} && ctest -C ${{ env.BUILD_TYPE }} --output-on-failure -j $(nproc)
74+
run: |
75+
if [ "$RUNNER_OS" == "macOS" ]; then
76+
CPU_COUNT=$(sysctl -n hw.ncpu)
77+
else
78+
CPU_COUNT=$(nproc)
79+
fi
80+
cd ${{ env.BUILD_DIR }} && ctest -C ${{ env.BUILD_TYPE }} --output-on-failure -j $CPU_COUNT
7581

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,4 @@ output
110110
packet
111111
releases
112112
install
113+
crash_reports

README.md

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,47 +9,54 @@
99

1010
这个项目收集了各种 C++ 编程中的实用示例,涵盖了系统编程、加密算法、多线程、崩溃处理、设计模式等多个领域。每个示例都力求简洁明了,便于学习和在实际项目中使用。
1111

12-
## 代码结构
12+
## 模块详情
1313

1414
### 1. [Breakpad](src/Breakpad/)
1515

1616
Google Breakpad 的简单封装,用于应用程序崩溃报告和堆栈跟踪。
1717

18-
- `breakpad.hpp` / `breakpad.cc` - Breakpad 封装类
19-
- `main.cc` - 使用示例
18+
- **核心文件**:
19+
- `breakpad.hpp` / `breakpad.cc` - Breakpad 封装类
20+
- `example.cc` - 使用示例
21+
- `breakpad_unittest.cc` - 单元测试
2022

2123
### 2. [ByteOrder](src/ByteOrder/)
2224

2325
系统字节序检测工具。
2426

25-
- `byteorder.cc` - 判断系统的字节序(大端序/小端序)
27+
- **核心文件**:
28+
- `byteorder.cc` - 使用多种方法判断系统的字节序(大端序/小端序)
2629

2730
### 3. [Crashpad](src/Crashpad/)
2831

2932
Google Crashpad 的简单封装,现代化的崩溃报告系统。
3033

31-
- `crashpad.hpp` / `crashpad.cc` - Crashpad 封装类
32-
- `main.cc` - 使用示例
34+
- **核心文件**:
35+
- `crashpad.hpp` / `crashpad.cc` - Crashpad 封装类
36+
- `example.cc` - 使用示例
37+
- `crashpad_server.py` - 崩溃报告服务器脚本
3338

3439
### 4. [Memcpy](src/Memcpy/)
3540

3641
内存拷贝函数实现及相关测试。
3742

38-
- `mymemcpy.hpp` / `mymemcpy.cc` - 自定义 memcpy 函数实现
39-
- `mymemcpy_unittest.cc` - 单元测试
43+
- **核心文件**:
44+
- `mymemcpy.hpp` / `mymemcpy.cc` - 自定义 memcpy 函数实现
45+
- `mymemcpy_unittest.cc` - 单元测试
4046

4147
### 5. [MonitorDir](src/MonitorDir/)
4248

4349
跨平台目录监控实现,支持 Windows、macOS 和 Linux。
4450

45-
- `monitordir.hpp` - 目录监控接口
46-
- `monitordir_win.cc` - Windows 实现(使用 `ReadDirectoryChangesW`
47-
- `monitordir_mac.cc` - macOS 实现(使用 `FSEvents`
48-
- `monitordir_linux_inotify.cc` - Linux inotify 实现
49-
- `monitordir_linux_fanotify.cc` - Linux fanotify 实现
50-
- `main.cc` - 使用示例
51+
- **核心文件**:
52+
- `monitordir.hpp` - 目录监控接口
53+
- `monitordir_win.cc` - Windows 实现(使用 `ReadDirectoryChangesW`
54+
- `monitordir_mac.cc` - macOS 实现(使用 `FSEvents`
55+
- `monitordir_linux_inotify.cc` - Linux inotify 实现
56+
- `monitordir_linux_fanotify.cc` - Linux fanotify 实现
57+
- `main.cc` - 使用示例
5158

52-
**Linux 平台说明**
59+
**Linux 平台说明**:
5360

5461
- `fanotify` 使用全局模式(`FAN_MARK_FILESYSTEM`),可以监控整个文件系统的事件
5562
- 需要 `CAP_SYS_ADMIN` 能力(root 权限)
@@ -59,38 +66,48 @@ Google Crashpad 的简单封装,现代化的崩溃报告系统。
5966

6067
基于 efsw 库的目录监控示例。
6168

62-
- `main.cc` - 使用 efsw 实现的目录监控示例
69+
- **核心文件**:
70+
- `main.cc` - 使用 efsw 实现的目录监控示例
6371

6472
### 7. [OpenSSL](src/OpenSSL/)
6573

6674
OpenSSL 加密算法使用示例。
6775

68-
- `openssl_common.hpp` / `openssl_common.cc` - 公共工具函数
69-
- `openssl_aes.cc` - AES 加解密示例
70-
- `openssl_base64.cc` - Base64 编解码示例
71-
- `openssl_hash.cc` - SHA256 哈希计算示例
72-
- `openssl_rsa.cc` - RSA 加解密示例
76+
- **核心文件**:
77+
- `openssl_common.hpp` / `openssl_common.cc` - 公共工具函数
78+
- `openssl_aes.cc` - AES 加解密示例
79+
- `openssl_base64.cc` - Base64 编解码示例
80+
- `openssl_hash.cc` - SHA256 哈希计算示例
81+
- `openssl_rsa.cc` - RSA 加解密示例
7382

7483
### 8. [Singleton](src/Singleton/)
7584

7685
现代化线程安全的单例模式实现,使用 C++11 特性确保跨平台兼容性。
7786

78-
- `singleton.hpp` - 模板化的单例基类,提供线程安全的实例访问
79-
- `singleton_unitest.cc` - 完整的单元测试,验证单例的唯一性、线程安全性等特性
87+
- **核心文件**:
88+
- `singleton.hpp` - 模板化的单例基类,提供线程安全的实例访问
89+
- `singleton_unitest.cc` - 完整的单元测试,验证单例的唯一性、线程安全性等特性
8090

8191
### 9. [Thread](src/Thread/)
8292

8393
基于 std::jthread 实现的线程和线程池(注意:Apple Clang 不支持)。
8494

85-
- `thread.hpp` - 线程类封装
86-
- `threadpool.hpp` - 线程池实现
87-
- `queue.hpp` - 线程安全队列
88-
- `*_unittest.cc` - 各组件单元测试
95+
- **核心文件**:
96+
- `thread.hpp` - 线程类封装
97+
- `threadpool.hpp` - 线程池实现
98+
- `queue.hpp` - 线程安全队列
99+
- `thread_unittest.cc` - 线程单元测试
100+
- `threadpool_unittest.cc` - 线程池单元测试
101+
- `queue_unittest.cc` - 队列单元测试
89102

90103
### 10. [utils](src/utils/)
91104

92105
通用工具类。
93106

94-
- `scopeguard.hpp` - RAII 范围守卫
95-
- `object.hpp` - 对象工具类
96-
- `utils.hpp` - 通用工具函数
107+
- **核心文件**:
108+
- `scopeguard.hpp` - RAII 范围守卫
109+
- `object.hpp` - 对象工具类
110+
- `utils.hpp` / `utils.cc` - 通用工具函数
111+
-
112+
113+
s

src/Breakpad/CMakeLists.txt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@ if(unofficial-breakpad_FOUND)
33
message(STATUS "found unofficial-breakpad")
44
endif()
55

6-
add_executable(breakpad_test main.cc breakpad.cc breakpad.hpp)
6+
add_executable(breakpad_unittest breakpad_unittest.cc breakpad.cc breakpad.hpp
7+
${CMAKE_SOURCE_DIR}/src/utils/utils.cc)
78
target_link_libraries(
8-
breakpad_test PRIVATE unofficial::breakpad::libbreakpad
9-
unofficial::breakpad::libbreakpad_client)
9+
breakpad_unittest
10+
PRIVATE unofficial::breakpad::libbreakpad
11+
unofficial::breakpad::libbreakpad_client GTest::gtest
12+
GTest::gtest_main GTest::gmock GTest::gmock_main)
13+
add_test(NAME breakpad_unittest COMMAND breakpad_unittest)
14+
15+
add_executable(breakpad_example example.cc breakpad.cc breakpad.hpp
16+
${CMAKE_SOURCE_DIR}/src/utils/utils.cc)
17+
target_link_libraries(
18+
breakpad_example PRIVATE unofficial::breakpad::libbreakpad
19+
unofficial::breakpad::libbreakpad_client)

0 commit comments

Comments
 (0)