add-memory-trace-tags
SKILL.md
内存跟踪标签添加
自动在 developtools_profiler 和 third_party_musl 仓库中添加新的资源跟踪类型标签。
概述
此 skill 自动跨两个仓库的多个文件添加内存跟踪标签,确保定义一致、协议更新和测试覆盖。
使用场景
适用于以下情况:
- 添加新的资源跟踪类型(COMMON_* 或特定类型)
- 更新内存分析功能
- 扩展跟踪标签系统
快速参考
| 组件 | 修改文件数 | 主要变更 |
|---|---|---|
| third_party_musl | 2 个文件 | TAG 和 MASK 定义 |
| developtools_profiler | 9 个文件 | 协议、逻辑、测试 |
使用方法
在对话中直接调用:
请添加一个新的资源跟踪标签 <标签名称>
或
使用 add-res-trace-tag 添加 <标签名>
参数说明
此 skill 会提示输入:
-
标签名称(必填)
- 格式:大写字母和下划线
- 风格:
COMMON_<类型名>或描述性名称 - 示例:
COMMON_PIXELMAP、CREATE_NATIVE_WINDOW_FROM_SURFACE
-
描述(可选)
- 用途说明
-
是否绕过大小过滤(可选,默认:是)
- 通用资源类型通常需要绕过大小过滤
修改内容
third_party_musl(2 个文件)
src/hook/linux/memory_trace.h- TAG、MASK、位域布局porting/linux/user/src/hook/memory_trace.h- 重复定义
developtools_profiler(9 个文件)
协议:
protos/types/plugins/native_hook/native_hook_result.proto- TraceType、MemoryType 枚举
常量:
device/plugins/native_daemon/include/hook_common.h- 索引常量
业务逻辑:
device/plugins/native_hook/src/hook_guard.cpp- TagId 映射device/plugins/native_daemon/src/hook_manager.cpp- 掩码转换device/plugins/native_daemon/src/stack_preprocess.cpp- 统计映射device/plugins/native_daemon/src/hook_record.cpp- TraceType 设置device/plugins/native_hook/src/hook_client.cpp- 过滤条件(仅 COMMON_* 类型)
测试:
device/plugins/native_daemon/test/unittest/common/native/hook_record_test.cppdevice/plugins/native_daemon/test/unittest/common/native/stack_preprocess_test.cpp
常见错误
MASK 定义规则
每个资源类型必须定义两个宏:
// ✅ 正确:同时定义两个宏
#define RES_COMMON_WINDOW (1ULL << 33)
#define RES_COMMON_WINDOW_MASK (1ULL << 33)
// ❌ 错误:缺少 _MASK 后缀
#define RES_COMMON_WINDOW (1ULL << 33)
// 缺少 RES_COMMON_WINDOW_MASK!
为什么需要两个定义:
RES_<NAME>- 基础掩码值RES_<NAME>_MASK- 统一接口的别名
常见错误场景:
错误 1:忘记添加 _MASK 后缀
#define RES_COMMON_SURFACE (1ULL << 34) // ✅ 有这个
// ❌ 缺少:#define RES_COMMON_SURFACE_MASK (1ULL << 34)
错误 2:只复制了第一行
#define RES_COMMON_TEXTURE (1ULL << 35) // ✅ 有这个
#define RES_COMMON_TEXTURE // ❌ 这行是错的!应该是 (1ULL << 35)
Skill 自动验证: 此 skill 会自动检查是否两个定义都存在,如果缺失会自动添加。
验证清单
添加新标签后检查:
- musl 主文件:TAG 已定义
- musl 主文件:MASK 已定义(两个都要)
- musl porting 文件:TAG 已定义
- musl porting 文件:MASK 已定义(两个都要)
- proto:TraceType 枚举值已添加
- proto:MemoryType 枚举值已添加
- hook_common.h:索引已定义
- hook_common.h:RESTRACE_TYPE_COUNT 已更新
- hook_guard.cpp:映射已添加
- hook_manager.cpp:转换逻辑已添加
- stack_preprocess.cpp:SaveMemTag 和 AddAllocStatistics 已添加
- hook_record.cpp:SetTraceType 分支已添加
- hook_client.cpp:过滤条件已更新(仅 COMMON_* 类型)
- 测试:测试用例已添加
约束条件
- 标签命名:大写字母和下划线
- 比特位分配:从 bit 34 开始(当前用到 bit 33)
- 索引分配:从 23 开始(当前最大索引 22)
- 枚举值:自动递增,不与现有值冲突
- 仓库路径:假设为
d:\Code\tools_develop\ - RESTRACE_TYPE_COUNT:必须等于最大索引 + 1
注意事项
- 编译顺序:修改 musl 后需要重新编译,profiler 才能使用新宏定义
- 协议兼容性:protobuf 修改后需要重新生成 C++ 代码
- 测试覆盖:所有修改都会添加相应的测试用例
- COMMON_ 类型*:只有 COMMON_* 前缀的类型才需要更新
hook_client.cpp的过滤条件
错误处理
| 错误 | 解决方案 |
|---|---|
| 标签已存在 | 使用不同的标签名称 |
| 文件未找到 | 验证仓库路径 |
| 权限被拒绝 | 检查文件写入权限 |
| 格式无效 | 标签名称必须是大写字母和下划线 |
| 缺少 MASK | Skill 自动添加 RES_*_MASK 定义 |
| 定义不匹配 | RES_* 和 RES_*_MASK 的值必须相同 |
Weekly Installs
24
Repository
openharmonyinsi…y-skillsGitHub Stars
3
First Seen
Feb 10, 2026
Security Audits
Installed on
opencode22
gemini-cli17
github-copilot17
codex17
amp17
kimi-cli17