感谢你考虑为 cpp-remote-profiler 做出贡献!
本项目采用贡献者公约作为行为准则。参与此项目即表示你同意遵守其条款。请阅读并遵守行为准则,帮助我们一起维护开放和友好的社区环境。
如果你发现了 bug,请通过 GitHub Issues 提交。提交前请:
- 搜索现有的 Issues,确认该问题未被报告
- 使用 Issue 模板,提供以下信息:
- 操作系统和版本
- 编译器和版本
- 复现步骤
- 期望行为和实际行为
- 相关日志或错误信息
欢迎提出新功能建议!请:
- 先在 Issues 中讨论你的想法
- 说明功能的使用场景和价值
- 等待维护者反馈后再开始实现
请参考下方的 Pull Request 流程。
- Linux (Ubuntu 20.04+ 或同等发行版)
- CMake 3.15+
- GCC 10+ 或 Clang 12+
- Git
# 安装系统依赖
sudo apt-get update
sudo apt-get install -y cmake build-essential git pkg-config wget
# 克隆项目(包含 vcpkg 子模块)
git clone https://github.com/IronsDu/cpp-remote-profiler.git
cd cpp-remote-profiler
# 初始化 vcpkg(如果未自动初始化)
git submodule update --init --recursive
# 安装 vcpkg 依赖
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install --triplet=x64-linux-release
cd ..# 创建构建目录
mkdir build && cd build
# 配置 CMake
cmake .. \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-linux-release \
-DBUILD_SHARED_LIBS=ON \
-DREMOTE_PROFILER_BUILD_EXAMPLES=ON \
-DREMOTE_PROFILER_BUILD_TESTS=ON
# 编译
make -j$(nproc)
# 运行测试
ctest --output-on-failure| 选项 | 默认值 | 说明 |
|---|---|---|
BUILD_SHARED_LIBS |
ON | 构建动态库 |
REMOTE_PROFILER_INSTALL |
ON | 生成安装目标 |
REMOTE_PROFILER_BUILD_EXAMPLES |
ON | 构建示例程序 |
REMOTE_PROFILER_BUILD_TESTS |
ON | 构建测试程序 |
- 遵循项目现有的代码风格
- 使用 C++20 标准
- 保持代码简洁、可读
- 类名: PascalCase (例如:
ProfilerManager) - 函数名: snake_case (例如:
start_cpu_profile) - 变量名: snake_case (例如:
profile_duration) - 常量: UPPER_SNAKE_CASE (例如:
MAX_PROFILE_DURATION) - 成员变量: 带
_后缀 (例如:server_running_)
- 缩进使用 4 个空格
- 每行最多 100 字符
- 大括号放在同一行
- 为公共 API 添加注释
- 复杂逻辑需要解释
- 避免冗余注释
本项目使用 Conventional Commits 规范:
<type>(<scope>): <subject>
<body>
<footer>
| 类型 | 说明 |
|---|---|
feat |
新功能 |
fix |
Bug 修复 |
docs |
文档更新 |
style |
代码格式(不影响功能) |
refactor |
代码重构 |
test |
测试相关 |
chore |
构建/工具相关 |
perf |
性能优化 |
feat: 添加内存分配追踪功能
- 支持追踪 malloc/free 调用
- 添加内存泄漏检测 API
Closes #123
fix: 修复 CPU profiling 信号处理冲突
当用户程序注册了 SIGUSR1 处理器时,profiling 会失败。
现在会保存并恢复用户的信号处理器。
- 代码通过所有测试
- 新功能有对应的测试用例
- 代码风格与项目一致
- 提交信息符合规范
- 更新相关文档
-
Fork 项目 并克隆到本地
-
创建分支
git checkout -b feature/your-feature-name
分支命名建议:
feat/xxx- 新功能fix/xxx- Bug 修复docs/xxx- 文档更新refactor/xxx- 代码重构
-
进行开发
- 编写代码
- 添加测试
- 更新文档
-
运行测试
cd build ctest --output-on-failure -
提交更改
git add <files> git commit -m "feat: 你的功能描述"
-
推送到 Fork
git push origin feature/your-feature-name
-
创建 Pull Request
- 前往 GitHub 创建 PR
- 填写 PR 模板
- 等待 CI 通过和代码审查
每个 PR 都会自动运行以下检查:
- 构建测试: GCC 和 Clang 编译
- 单元测试: 所有测试用例
- 代码质量: AddressSanitizer、UBSan、Clang-Tidy
请确保所有检查通过。如果失败,请在 PR 中修复问题。
- 新功能必须添加测试用例
- 测试文件放在
tests/目录 - 使用 Google Test 框架
TEST(TestSuiteName, TestCaseName) {
// 测试代码
}cd build
ctest -R <test_name> --output-on-failure如果你有任何问题,可以:
- 在 Discussions 中提问
- 在 Issue 中留言
- 发送邮件给维护者
感谢你的贡献!