C++代码配置trace打点数据
================

#### 问题现象

在C++项目开发过程中，如何配置trace打点数据？

#### 背景知识

开发者可以在代码中调用HiTraceMeter接口进行trace打点，然后使用[hitrace命令行工具](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hitrace)获取程序运行时产生的打点信息，从而了解程序运行的进程、线程、时间戳、cpu等信息。以帮助开发者进行问题分析和性能调优等活动。HiTraceMeter提供ArkTS和C/C++两种接口，按需选择。

*   [使用HiTraceMeter跟踪性能（ArkTS）](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hitracemeter-guidelines-arkts)
*   [使用HiTraceMeter跟踪性能（C/C++）](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hitracemeter-guidelines-ndk)

#### 解决方案

OH\_HiTrace\_StartTrace用于标记一个同步跟踪耗时任务的开始。同步跟踪打点接口OH\_HiTrace\_StartTrace和OH\_HiTrace\_FinishTrace必须配对使用。

OH\_HiTrace\_StartAsyncTrace标记一个异步跟踪耗时任务的开始。用于在异步操作前调用进行开始打点，异步跟踪开始和结束数据由于不是顺序发生的，所以解析时需要通过一个唯一的taskId进行识别。必须和OH\_HiTrace\_FinishAsyncTrace配对使用，参数name和taskId相同的开始与结束打点相匹配，构成一个异步跟踪耗时任务。

*   OH\_HiTrace\_StartTrace和OH\_HiTrace\_FinishTrace配套使用，要用cpu insight才能看到trace信息。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4a/v3/Kg3Uqm3dRK24EOI0SB3BLA/zh-cn_image_0000002628394994.png?HW-CC-KV=V1&HW-CC-Date=20260709T133739Z&HW-CC-Expire=86400&HW-CC-Sign=9E5FE916DF5A6B034C54AC6693B34ACCBA23EC594BB6E60CF14BC71B69E08268 "点击放大")
    
*   OH\_HiTrace\_StartAsyncTrace和OH\_HiTrace\_FinishAsyncTrace配套使用，time insight和cpu insight都可以看到trace信息。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/50/v3/xwa4YvhLTRyEtzbb6BWQZA/zh-cn_image_0000002658914213.png?HW-CC-KV=V1&HW-CC-Date=20260709T133739Z&HW-CC-Expire=86400&HW-CC-Sign=D8C2E41A015176B8C4785879791CEBF2C9FB919A611A0A6F2E2D075FA05F77E9 "点击放大")
    
*   如果是配合ArkTS/Native排查函数耗时，用OH\_HiTrace\_StartAsyncTrace和OH\_HiTrace\_FinishAsyncTrace进行打点，然后使用Profiler的Time Insight模板就可以看到。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/64/v3/T_ufZNn1RsSxmeL5i5YkUA/zh-cn_image_0000002658794261.png?HW-CC-KV=V1&HW-CC-Date=20260709T133739Z&HW-CC-Expire=86400&HW-CC-Sign=A50C64F0F1AA2864EC04FCB8C9F692A3459089D73CC435CA76EDE1674D8759F8 "点击放大")
    
*   运行hitrace打点，要在这里添加libhitrace\_ndk.z.so。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/53/v3/Zp0slcZoTACzQMaOpBfuHg/zh-cn_image_0000002628554902.png?HW-CC-KV=V1&HW-CC-Date=20260709T133739Z&HW-CC-Expire=86400&HW-CC-Sign=28CCD67DFE94EDC1D0401D6AA77E8F6C3E251B7CC3C21609E0C1AC40FE9F5818 "点击放大")
    

#### 总结

[HiTraceMeter](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hitracemeter-guidelines-ndk)提供系统性能打点接口。开发者通过在关键代码位置调用HiTraceMeter接口提供的API接口，能够有效跟踪进程轨迹、查看系统性能。

HiTraceMeter通过应用程序的打点操作收集数据，这些数据通过内核sysfs文件接口进入内核的ftrace数据缓冲区。随后，使用hitrace命令行工具可以读取这些数据，并将其输出到设备侧的文件中。

通过使用HiTraceMeter，开发者可以获得有价值的性能数据，从而帮助他们优化应用的性能和响应速度。