
区块链金融科技【免费下载链接】moneroMonero: the secure, private, untraceable cryptocurrency项目地址https://gitcode.com/gh_mirrors/mo/monero点击查看免费下载本篇技术指南围绕 Monero 仓库中的 docs/COMPILING_DEBUGGING_TESTING.md 展开面向希望借助 CMake 的新特性快速上手 Monero 源码开发、调试与测试的开发者。你将掌握基础编译的最小命令形态、为 Release 构建启用共享库以加速 TDD 迭代、为 IDE 生成工程文件以及在 Code::Blocks 中配置 GTest 过滤器进行精准调试的完整流程。文中所有命令均可在本仓库中直接验证。阅读提示本文假设你已经阅读过 README.md 中的 Build instructions 一节本节只补充超出 README 的开发效率技巧。README 中已明确Monero 使用 CMake 构建系统顶层 Makefile 负责按需调用 cmake 命令README.md。基础编译从 Makefile 预设到最小 CMake 命令Monero 可以通过顶层 Makefile 编译其中提供了多个预设目标。这些目标本质上是对cmake调用携带各种选项与make构建或make test测试的封装。查看 Makefile 可确认主要目标Makefile 目标对应的 CMake 核心参数用途make debug/cmake-debug-D CMAKE_BUILD_TYPEDebug调试构建共享库见下文make release/cmake-release-D CMAKE_BUILD_TYPERelease发布构建make release-test-D BUILD_TESTSON -D BUILD_GUI_DEPSON -D CMAKE_BUILD_TYPERelease后执行make make test发布构建 运行测试套件make debug-test-D BUILD_TESTSON -D BUILD_GUI_DEPSON -D CMAKE_BUILD_TYPEDebug后执行make make test调试构建 运行测试make debug-test-asan在上者基础上追加-D SANITIZEON启用 ASAN 内存消毒器的调试测试make release-static-D STATICON -D ARCHdefault -D CMAKE_BUILD_TYPERelease静态链接发布构建make coverage-D BUILD_TESTSON -D CMAKE_BUILD_TYPEDebug -D COVERAGEON带覆盖率报告的构建这些预设是可以被提取出来并按需修改的。例如从一个新建的构建目录中执行的最小外部 CMake 编译命令是cmake -S $DIR_SRC -DCMAKE_BUILD_TYPERelease make其中环境变量DIR_SRC存放 Monero 源码路径。-S指定源码目录CMAKE_BUILD_TYPE决定优化级别与调试信息。注意 Makefile 中release目标默认还会追加-D BUILD_TESTSON -D BUILD_GUI_DEPSONMakefile因此上面的最小命令比make release更轻量——如果你只需要monerod等核心二进制而不需要测试与 GUI 依赖可以这样裁剪。值得注意的默认值根 CMakeLists.txt 中option(BUILD_TESTS Build tests. OFF)默认关闭测试option(BUILD_GUI_DEPS Build GUI dependencies. OFF)默认关闭 GUI 依赖所以make release显式开启二者。此外USE_SINGLE_BUILDDIR1可使构建目录固定为build适用于非 git 源码树见 Makefile。场景一TDD 工作流 —— 为 Release 构建启用共享库构建共享库能大幅节省磁盘空间与链接时间。默认情况下只有 Debug 构建产出共享库这一逻辑定义在根 CMakeLists.txtset(BUILD_SHARED_LIBS_DEFAULT OFF) if (NOT STATIC AND CMAKE_BUILD_TYPE_LOWER STREQUAL debug) set(BUILD_SHARED_LIBS_DEFAULT ON) endif() option(BUILD_SHARED_LIBS Build internal libraries as shared ${BUILD_SHARED_LIBS_DEFAULT})即非静态且构建类型为 Debug 时BUILD_SHARED_LIBS默认置 ON其余情况包括 Release默认 OFF。若想在 Release 构建中也产出动态库追加该标志即可cmake -S $DIR_SRC -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSON make当BUILD_SHARED_LIBSON时CMake 会输出Building internal libraries with position independent code并定义-DBUILD_SHARED_LIBS宏CMakeLists.txt。仓库内多个健康检查脚本如 utils/health/clang-tidy-run-common.sh、utils/health/clang-include-what-you-use-run.sh、utils/health/clang-build-time-analyzer-run.sh同样以-DBUILD_SHARED_LIBSON构建正是为了快速迭代与缩短链接时间。为什么这契合 TDD测试驱动开发TDD的典型节奏是先编写描述类/方法新需求的测试然后不断修改实现直到测试通过。测试本身通常需要很长的编译时间所以理想情况是只写一次。而实现代码只要被恰当地封装在某个.cpp文件中后续每次修改只需重编译这一个源文件重新生成该实现对应的共享库再次运行测试——测试二进制无需重链直接通过共享库加载最新实现。因此Release 共享库的组合把 TDD 循环的编译成本压缩到单文件重编译 库替换这是该场景的核心收益。场景二为 IDE 生成工程文件CMake 可以为多种 IDE 生成工程文件。查看支持的生成器列表cmake -G例如生成 Code::Blocks 的 Makefile 与工程文件cmake -G CodeBlocks - Unix Makefiles (...)该调用额外产出的工件是构建目录中的monero.cbp工程文件可直接用 Code::Blocks 打开。其他常用生成器以cmake -G实际输出为准包括Eclipse CDT4 - Unix Makefiles、Ninja、XcodemacOS与Visual StudioWindows等开发者可按平台选择。场景三在 Code::Blocks 中调试1. 准备可调试的构建假设DIR_SRC保存源码路径使用 2 个核心并行编译cmake -S $DIR_SRC -G CodeBlocks - Unix Makefiles -DCMAKE_BUILD_TYPEDebug -DBUILD_TESTSON make -j 2要点说明-DCMAKE_BUILD_TYPEDebug生成带调试符号的二进制是断点调试的前提-DBUILD_TESTSON构建测试目标。根 CMakeLists.txt 默认关闭测试必须显式开启-j 2双核并行编译。README 建议每个线程预留约 1 核 CPU 与 2GB 内存README.md。构建成功后用 Code::Blocks 打开构建目录中的monero.cbp。2. 选择调试目标从 Code::Blocks 菜单栏选择要调试的目标以单元测试为例Build - Select target - Select target - unit_testsunit_tests目标在 tests/unit_tests/CMakeLists.txt 中定义它链接了ringct、cryptonote_protocol、cryptonote_core、wallet、p2p等 Monero 核心库以及 GTest${GTEST_LIBRARIES}。该文件同时将unit_tests注册为 CTest 测试命令为unit_tests --data-dir ${TEST_DATA_DIR}tests/unit_tests/CMakeLists.txt。3. 用 GTest 过滤器缩短迭代周期为避免每次调试都经历耗时初始化与无关代码执行可以借助 GTest 的测试过滤能力只运行关心的片段。先在构建目录列出全部已注册测试tests/unit_tests/unit_tests --gtest_list_tests以日志模块为例列表中会出现标签logging.及其子测试。只运行全部日志测试tests/unit_tests/unit_tests --gtest_filterlogging.*在 tests/unit_tests/logging.cpp 中可以看到该标签下的真实用例例如TEST(logging, no_logs)、TEST(logging, default)、TEST(logging, glob_suffix)、TEST(logging, multiline)、TEST(logging, deadlock)等十余个测试它们覆盖了 easylogging 的分类过滤、glob 匹配、多行日志与死锁回归等行为——--gtest_filterlogging.*会精确命中这些用例。把同样的过滤参数传给 Code::Blocks 的调试器Project - Set programs arguments...在Programs arguments文本框中填入--gtest_filterlogging.*按F9或选择Build - Build and run验证预期的单元测试是否被正确执行。确认无误后设置好断点即可通过Debug - Start/Continue进入调试。GTest 过滤参数速查参数含义示例--gtest_list_tests列出所有已注册测试标签与用例名--gtest_list_tests--gtest_filterPATTERN按模式过滤测试*为通配符-表示排除--gtest_filterlogging.*排除语法pattern1:-pattern2先包含后排除--gtest_filter*:*Deadlock*类组合除命令行直接使用外过滤参数同样适用于脚本化场景仓库的 tests/libwallet_api_tests/libwallet_api_tests.py 通过LIBWALLET_API_TESTS_GTEST_FILTER环境变量读取过滤模式并传给--gtest_filter可作为在 CI 或脚本中复用该机制的参考。进阶从 Makefile 预设出发的调试相关变体结合 Makefile 中已封装的预设可以派生出更多调试场景# 调试构建默认启用共享库迭代快 make debug # 调试构建 运行全部测试 make debug-test # 调试构建 ASAN 内存/未定义行为消毒器 运行测试 make debug-test-asan # 纯调试构建不构建测试 make debug-asan其中debug-test-asan与debug-asan依赖根 CMakeLists.txt 的SANITIZE选项开启后会向 C/C 编译器追加-fsanitizeaddress,undefined用于捕获内存越界、泄漏与未定义行为。若在 Code::Blocks 中调试时需要 ASAN可在生成工程文件的 CMake 调用中追加-DSANITIZEON。附文档提及的规划中特性原文档结尾提到两项待完成并合并的方向链接指向的 PR 内容并未包含在本仓库源码中仅作背景说明Multihost parallel compilation多主机并行编译跨机器分发编译任务以进一步缩短构建时间Unity builds联合构建将多个翻译单元合并编译减少编译与链接开销。截至本仓库当前快照这两项功能尚未在 CMakeLists.txt 或 Makefile 中体现读者可留意上游后续版本。这也提示Monero 的构建体系仍在持续演进跟踪 Makefile 与根 CMakeLists.txt 的变更即可第一时间获得新的编译技巧。小结本文给出的四条核心路径可以组合使用形成一条高效开发流水线最小编译cmake -S $DIR_SRC -DCMAKE_BUILD_TYPERelease make只保留你需要的目标TDD 加速Release 构建追加-DBUILD_SHARED_LIBSON让单文件修改 → 共享库替换 → 测试重跑 的循环代价最小IDE 集成cmake -G CodeBlocks - Unix Makefiles生成monero.cbp用Build - Select target选择目标精准调试--gtest_list_tests列出用例--gtest_filterlogging.*限定范围再经Project - Set programs arguments...注入 Code::Blocks 调试器配合断点完成快速定位。所有命令均以本仓库 Makefile 与根 CMakeLists.txt 的现有实现为准可随时对照源码验证其行为。赞分享区块链金融科技【免费下载链接】moneroMonero: the secure, private, untraceable cryptocurrency项目地址https://gitcode.com/gh_mirrors/mo/monero点击查看免费下载相关推荐ESP32终极入门指南3步完成Arduino环境搭建与物联网开发ESP32终极入门指南3步完成Arduino环境搭建与物联网开发 想要快速上手ESP32物联网开发却不知道从哪里开始作为Arduino官方支持的ESP32嵌入式物联网驱动开发FrankenPHP 贡献者开发指南从源码编译、测试到 CGO/PHP 联合调试的完整实战手册FrankenPHP 贡献者开发指南从源码编译、测试到 CGO/PHP 联合调试的完整实战手册 本篇指南面向希望为 FrankenPHPThe modern后端Wazuh dbsync 集成测试编译与运行指南基于 CMake 的 Linux 测试环境搭建实战Wazuh dbsync 集成测试编译与运行指南基于 CMake 的 Linux 测试环境搭建实战 本指南以 src/shared_modules/dbsyn网络安全IDS日志分析应用安全漏洞扫描创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考