skills/ryanjson-api-usageskills/ryanjson-optimizationskills/ryanjson-test-engineeringreferences/ 文档为准。terminology.md。xmake。RyanJson:默认 unit 目标(不注入 libFuzzer main)RyanJsonFuzz:专用 fuzz 目标(启 isEnableFuzzer + -fsanitize=fuzzer)RyanJsonQemu / RyanJsonQemuCm3:QEMU 目标(FreeRTOS Cortex-M,含非对齐访问 fault 校验)SCB->CCR.UNALIGN_TRP=1,以硬件语义捕获非对齐访问。-mno-unaligned-access,避免编译器辅助对齐掩盖真实语义。YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS=1 作为第三方库局部防御开关保留,除非用户明确要求调整。scripts/ci/runBaseCoverage.sh:单元测试矩阵(quick=2 / nightly=4 / full=8)scripts/ci/runCoverage.sh:fuzzer 执行与覆盖率生成run_local_base.sh:本地一键 unit 矩阵run_local_qemu.sh:本地一键 QEMU 矩阵(默认 full,覆盖 localbase 用例并校验对齐异常)run_local_ci.sh:本地模拟 ci-pr(unit + quick fuzz)run_local_fuzz.sh:本地固定 6 并发 fuzzrun_local_base.sh:UNIT_MODE=full、UNIT_SKIP_COV=1run_local_qemu.sh:QEMU_MODE=full、QEMU_STOP_ON_FAIL=1run_local_ci.sh:full unit + quick fuzz(FUZZ_SKIP_COV=1)run_local_fuzz.sh:FUZZ_RUNS=10000、FUZZ_WORKERS/JOBS=6run_local_qemu.sh 默认保留 ANSI 颜色输出;仅在用户明确要求“去色/净化日志”时再剥离控制符。coverage/unitMatrix(report.txt + html/)coverage/fuzz(report.txt + html/)Makefile 为历史辅助,不是当前主流程。SConscript 主要用于 RT-Thread 软件包集成。xmake.lua:target("RyanJson") 与 target("RyanJsonFuzz") 的模式分离xmake.lua:RyanJsonFuzz 中 add_defines("isEnableFuzzer") 与 -fsanitize=fuzzerxmake.lua:RyanJson 为链接兼容补入 test/fuzzer/utils/fuzzerDriver.c、fuzzerMemory.c(不启用 fuzz sanitizer)test/unityTest/runner/main.c:#ifndef isEnableFuzzer 包裹 Unity mainscripts/ci/runBaseCoverage.sh:unit 矩阵执行与合并覆盖率scripts/ci/runCoverage.sh:构建/执行 RyanJsonFuzz + llvm-covrun_local_base.sh、run_local_qemu.sh、run_local_ci.sh、run_local_fuzz.sh:本地入口封装test/qemu/platform/qemuStartup.c:SCB->CCR.UNALIGN_TRP=1 的运行时设置与启动日志xmake.lua:QEMU target 保留 YYJSON_DISABLE_UNALIGNED_MEMORY_ACCESS=1,不启用 -mno-unaligned-accessrun_local_qemu.sh:QEMU 流清洗默认保留 ANSI ESC(颜色输出)example/test/unityTest/test/fuzzer/Print/Minify、Add/Insert/Replace 失败所有权、宏分支行为),优先依据当前源码与单元测试。RyanJson/*.h、RyanJson/*.c)test/unityTest/)test/fuzzer/)RyanJsonStrictObjectKeyCheckRyanJsonDefaultAddAtHeadRyanJsonStrictObjectKeyCheck=falseRyanJsonDefaultAddAtHead=falseCreate* 成功:节点归调用方,直到挂载或显式释放。Detach* 成功:返回节点归调用方。Add/Insert 与 Replace 的失败语义不得混用。Add/Insert 失败时,游离 item 走库侧清理;非游离 item 返回失败但不释放(保护原树)。Replace 失败不消费新节点,调用方需复用或释放。RyanJson/RyanJsonItem.c:RyanJsonInsert 失败语义(游离 item 走 error__ 删除,非游离 item 早返回不删除)RyanJson/RyanJsonItem.c:RyanJsonReplaceByKey/ByIndex 失败路径返回 false,不删除新 itemtest/unityTest/cases/core/testCreate.c:已挂树节点被拒绝插入test/unityTest/cases/core/testReplace.c:Replace 失败后 item 仍可复用并由调用方释放main 入口,不允许 fuzz sanitizer 注入 main。RyanJsonQemu* 目标,校验 FreeRTOS 调度与非对齐访问 fault 语义。scripts/ci/runCoverage.sh 进行覆盖链路。xmake -b RyanJsonxmake -b RyanJsonQemuxmake -b RyanJsonFuzz./run_local_base.sh./run_local_qemu.sh./run_local_ci.sh./run_local_fuzz.shscripts/ci/*
UNIT_MODE=quick UNIT_SKIP_COV=1 bash scripts/ci/runBaseCoverage.shUNIT_MODE=full bash scripts/ci/runBaseCoverage.shFUZZ_MODE=quick FUZZ_SKIP_COV=1 bash scripts/ci/runCoverage.shFUZZ_MODE=nightly FUZZ_SKIP_COV=0 bash scripts/ci/runCoverage.shXMAKE_FORCE_CLEAN=1 仅在怀疑配置缓存污染时启用;默认增量模式更快。scripts/ci/runCoverage.sh 会先把 llvm-cov report --use-color 输出到终端,再写入 coverage/fuzz/report.txt。readdir)获取,不再维护 rfc8259_filelist.inc。stdint,命名统一小驼峰。?:)可用于“无副作用、单行、明显更清晰”的场景;复杂分支统一使用 if/else。@brief 描述“这是什么 + 做什么”。@note;涉及原理或公式时,补 @details。1.、2)、3.1、A.、Stage 1:;改用语义化短句标题。@param@return//;关键配置、公开接口、复杂逻辑优先使用 Doxygen 块注释。/** @brief ... */ 形式。Array、Object、Null、Bool、Int、DoublestrValue、intValue、doubleValue、boolValue、objValueAdd/Insert/Replace/Detach/Delete、RyanJsonAddPosition、RyanJsonInlineStringSizestrValue(字符串载荷)。推荐模板:
/**
* @brief 说明对象与作用。
* @note 说明默认行为或限制条件。
* @details 说明推导过程、公式或实现约束(可选)。
*/