• Home
Name Date Size #Lines LOC

..--

config/12-May-2024-109

demo/12-May-2024-1,2561,018

etc/12-May-2024-4848

figures/12-May-2024-

include/12-May-2024-7,8785,869

interfaces/12-May-2024-1,9461,299

proto/12-May-2024-13191

script/12-May-2024-12,06810,956

src/12-May-2024-15,45512,654

test/12-May-2024-19,23013,537

.clang-formatD12-May-20244.5 KiB169164

.gitignoreD12-May-2024116 1110

BUILD.gnD12-May-202412.3 KiB528449

LICENSED12-May-202411.3 KiB203169

OAT.xmlD12-May-202412.7 KiB12267

README.mdD12-May-202412.2 KiB387264

README_zh.mdD12-May-202411.8 KiB402275

bundle.jsonD12-May-20241.2 KiB5150

clang_format_all.batD12-May-2024839 2118

clang_format_all.shD12-May-2024754 193

hiperf.gniD12-May-20241.5 KiB5345

README.md

1# hiperf
2
3
4## Introduction
5
6hiperf is a command-line debugging tool provided by OpenHarmony for developers. It can capture performance data of a specific program or the entire system, like the kernel's perf tool. hiperf can run on Windows, Linux, and macOS.
7
8### Architecture
9
10![](figures/hiperf_architecture.png)
11
12## Directory Structure
13
14```
15/developtools/hiperf
16├── demo			# Demo program
17│   ├── cpp			# C++ demo program, which demonstrates how to invoke APIs to simulate sampling scenarios.
18│   └── js			# JS demo program, which demonstrates how to invoke APIs.
19├── include			# Project header files.
20│   └── nonlinux	# Header file for cross compilation (non-Linux platform)
21├── interfaces		# APIs
22│   ├── innerkits	# C APIs.
23│   └── kits		# JS APIs
24├── proto		    # Definition of the data structure exported to proto by the report command
25├── script			# Host scripts, including HTML
26│   └── test		# Unit test of the script
27├── src				# Source code
28└── test			# Unit test of the source code
29
30```
31
32## Constraints
33
34hiperf must be used with Python 3.7.0 or later.
35
36| Dependency | Version |
37| -------- | ----- |
38| Python   | 3.7.0 |
39|          |       |
40
41
42
43## Building
44
45#### Basic Settings
46
47- Ensure that the hiperf component name is in the JSON file of the Product Definition.
48  - [Product Definition](https://gitee.com/openharmony/productdefine_common)
49    - Add `"developtools:hiperf":{}`.
50
51
52#### Build Commands
53
54|Description |Parameter |
55| -------------------------------------- | ----------------------------------- |
56| Build only the binary executable files of the current device platform.    | --build-target hiperf_target        |
57| Build all components (including unit tests) of all platforms. | --build-target hiperf_all           |
58| Build the tool for x86_64 Linux.     | --gn-args "hiperf_target_host=true" |
59| Build the unit test. | --build-target hiperf_unittest |
60| Build the unit test interface (command line).     | --build-target hiperf_interfacetest |
61
62
63#### Output ####
64
65| Build Target | Running Platform | File Location | File Name |
66| ----------------- | -------- | ----------------------------------------------------- | -------------------- |
67| Dev command-line program  | arm      | out\ohos-arm-release\developtools\hiperf\hiperf       | hiperf               |
68|                   | linux    | out\ohos-arm-release\clang_x64\developtools\hiperf    | hiperf               |
69| Host command-line program | Linux    | out\ohos-arm-release\clang_x64\developtools\hiperf    | hiperf_host          |
70|                   | Windows  | out\ohos-arm-release\mingw_x86_64\developtools\hiperf | hiperf_host.exe      |
71| Dynamic library of the host | Linux | out\ohos-arm-release\clang_x64\developtools\hiperf | libhiperf_report.so |
72|                   | Windows  | out\ohos-arm-release\mingw_x86_64\developtools\hiperf | libhiperf_report.dll |
73
74You can also run **developtools/hiperf/script/package.sh** after the build to package the files to the **out** folder.
75
76```
77host/
78└── developtools
79    ├── hiperf
80    │   ├── bin								  # All binary files
81    │   │   ├── linux						   # Linux platform
82    │   │   │   └── x86_64
83    │   │   │       ├── hiperf_host				# Executable program run by the PC. The Report and Dump commands are supported.
84    │   │   │       └── libhiperf_report.so		# Lib file run by the PC. It is used by the python script.
85    │   │   ├── ohos
86    │   │   │   └── arm						   # Arm platform
87    │   │   │       └── hiperf				    # Executable program run by the board
88    │   │   └── windows						   # Windows
89    │   │       └── x86_64
90    │   │           ├── hiperf_host.exe			# Executable program run by the PC
91    │   │           └── libhiperf_report.dll	# Lib file run by the PC
92    │   │
93    │   │									  # Python files run by the PC
94    │   ├── command_script.py					# Script of the hiperf commands, used to generate sampling data
95    │   ├── hiperf_utils.py						# Utility class of hiperf
96    │   ├── loadlib_test.py						# Lib test script
97    │   ├── make_diff.py						# Script used to generate Diff data
98    │   ├── make_report.py						# Script used to generate a report from the sampled data
99    │   ├── recv_binary_cache.py				# Script used to collect the symbol table
100    │   └── report.html						    # Template of the HTML display page
101    └── hiperf.tar.gz						    # Package of the preceding files
102
103```
104
105
106
107#### hiperf with Debug Symbols
108
109Find **exe.unstripped** and **lib.unstripped** in the **out** directory. For example:
110
111out\ohos-arm-release\clang_x64\exe.unstripped\clang_x64\developtools\hiperf
112
113
114
115## Usage
116
117### Test Code
118
119Test code is provided in **hiperf_example_cmd.cpp** to verify sampling functions of thread scheduling, memory allocation, and CPU load.
120
121The code is located in:
122
123```
124hiperf\demo\cpp\hiperf_example_cmd.cpp
125```
126
127Help information about the test command:
128
129```
130 ./hiperf_example_cmd --help
131this is a demo test command
132  Use the following commands to simulate different scenarios
133  --help
134    this page
135  --thread <number>
136    setup the thread number, default is 5 second
137  --time <time>
138    setup run sec, default is 10 second
139  --stack <level>
140    setup stack level, default is 5
141  --nowait
142    setup skip the start, default wait the start
143  --dynamic
144    will run some code in each stack level
145  --mmap
146    will run mmap code in the loop
147```
148
149
150
151### Main Command Format
152
153```
154hiperf [options] COMMAND [args for command]
155```
156
157
158
159- [options]
160  - Optional parameter.
161  - Debugging commands, such as enabling the logging function.
162- COMMAND
163  - Mandatory parameter.
164  - Name of a sub-function, for example, **record** or **report**.
165- [args for command]
166  - Parameters of the sub-function
167
168### help
169
170You can run the **--help** command to view help information.
171
172```
173--help [command]
174
175[command] --help
176```
177
178Both formats are supported.
179
180### Parameters
181
182| Parameter                           | Description                        |
183| ------------------------------- | -------------------------------- |
184| --help [command]                | Displays the help information about the specified function.          |
185| --debug                         | Enables the debug logs of the DEBUG level.       |
186| --verbose                       | Enables the debug logs of the VERBOSE level.     |
187| --much                          | Enables the debug logs of the MUCH level.        |
188| --mixlog                        | Displays mixed debug logs to the screen (stdout).|
189| --logtag <tagA [,tagB] [,tagC]> | Enables the debug logs of the MUCH level for the specified module.|
190| --hilog                         | Prints logs to Hilog.               |
191| --logpath                       | Specifies the log path.              |
192| --nodebug                       | Stop printing any logs.                |
193
194### list
195
196The **list** command lists all the perf events supported by the performance monitoring unit (PMU).
197
198The event names are used for the **-e** and **-g** parameters of the **stat** and **record** commands.
199
200```
201Usage: hiperf list [event type name]
202```
203
204List the hardware events supported by the PMU. The command also lists the events that are not supported by the PMU.
205
206```
207./hiperf list hw
208```
209
210### stat
211
212The **stat** command monitors the specified application and periodically prints the values of performance counters.
213
214```
215Usage: hiperf stat [options] [command [command-args]]
216       Collect performance counter information of running [command].
217```
218
219Monitor the performance counter of the process on CPU 0 for 3 seconds.
220
221```
222 ./hiperf stat -d 3 -c 0
223```
224
225### record
226
227The **record** command samples the specified application and saves the sampling data to a file (**perf.data** by default).
228
229```
230Usage: hiperf record [options] [command [command-args]]
231       Collect performance sampling information of running [command].
232```
233
234Sample all processes in the system for 3 seconds and display detailed log information.
235
236```
237	./hiperf record -d 3 -a --verbose
238```
239
240### dump
241
242The **dump** command reads the **perf.data** file without processing it.
243
244You can verify the correctness of the raw sampling data.
245
246```
247Usage:hiperf dump [option] \<filename\>
248       Dump specific parts of specified file.
249```
250
251### report
252
253The **report** command displays the sampling data (read from **perf.data**) and converts it to the required format (for example, JSON or ProtoBuf).
254
255```
256Usage: hiperf dump [option] \<filename\>
257       Dump specific parts of specified file .
258```
259
260Output a common report, with the minimum display percentage of 1%.
261
262```
263./hiperf report --limit-percent 1
264```
265
266### Scripts
267
268Run scripts to perform sampling operations (which can easily generate HTML reports).
269
270##### Sampling
271
272Run **command_script.py** to sample data. This script is the packaging script of the **report** command.
273
274```
275Usage: command_script.py [-h]
276                         (-app PACKAGE_NAME | -lp LOCAL_PROGRAM | -cmd CMD | -p [PID [PID ...]] | -t [TID [TID ...]] | -sw)
277                         [-a ABILITY] [-r RECORD_OPTIONS] [-lib LOCAL_LIB_DIR]
278                         [-o OUTPUT_PERF_DATA] [--not_hdc_root]
279
280Collect performance sampling information of running [command].
281```
282
283Sample the **com.ohos.launch** package.
284
285```
286python command_script.py -app com.ohos.launch
287```
288
289Sample the hdcd process.
290
291```
292python command_script.py -lp hdcd
293```
294
295##### Collecting Symbol Tables
296
297Run **recv_binary_cache.py** to collect symbol tables. The tool searches for the ELF in the specified paths based on the related files and libraries recorded in **perf.data** and their **buildid**s.
298
299```
300Usage: recv_binary_cache.py [-h] [-i PERF_DATA]
301                            [-l LOCAL_LIB_DIR [LOCAL_LIB_DIR ...]]
302
303Recv binaries needed by perf.data from device to binary_cache directory.
304```
305
306The following specifies two symbol table paths.
307
308```
309python recv_binary_cache.py -l Z:\OHOS_MASTER\out\ohos-arm-release\lib.unstripped  Z:\OHOS_MASTER\out\ohos-arm-release\exe.unstripped
310```
311
312The symbol table files will be copied to the **binary_cache** folder.
313
314The tool preferentially searches for the specified symbol table paths. If no path is specified, the tool copies the files in the device.
315
316##### Displaying Sampled Data
317
318Run **make_report.py** to display the sampled data in an HTML page.
319
320```
321Usage: make_report.py [-h] [-i PERF_DATA] [-r REPORT_HTML]
322
323To make a report, you need to enter the data source and the path of the
324report.
325```
326
327An HTML file is generated. The default file name is **hiperf_report.html**.
328
329```
330python make_report.py
331```
332
333- Displaying the home page
334
335![](figures/hiperf_homepage.png)
336
337- Displaying the flame graph.
338
339![](figures/hiperf_flame.png)
340
341## Troubleshooting
342
343#### Can't find hdc_std in PATH environment.
344
345```
346python command_script.py -lp ps
347['../..\\..\\platform-tools\\hdc', 'version']
348['hdc', 'version']
349Traceback (most recent call last):
350  File "command_script.py", line 367, in <module>
351    main(parser_add_argument())
352  File "command_script.py", line 361, in main
353    profiler = PerformanceProfile(args)
354  File "command_script.py", line 143, in __init__
355    self.hdc = HdcInterface(root_authority=not args.not_hdc_root)
356  File "Z:\OHOS_MASTER\out\host\developtools\hiperf\hiperf_utils.py", line 173, in __init__
357    raise Exception("Can't find hdc in PATH environment.")
358Exception: Can't find hdc_std in PATH environment.
359```
360
361Check whether the **PATH** environment variable contains the hdc executable file.
362
363Run the following commands:
364
365```
366where hdc_std
367Z:\OHOS_MASTER\developtools\hdc_standard\prebuilt\windows\hdc_std.exe
368Z:\OHOS_STD_2.0\developtools\hdc_standard\prebuilt\windows\hdc_std.exe
369```
370
371
372
373
374## Repositories Involved
375
376Development Toolchain Subsystem
377
378[**developtools\hiperf**](https://gitee.com/openharmony/developtools_hiperf)
379
380[developtools\developtools_profiler](https://gitee.com/openharmony/developtools_profiler)
381
382[developtools\developtools_bytrace_standard](https://gitee.com/openharmony/developtools_bytrace_standard/)
383
384[third_party\libunwind](https://gitee.com/openharmony/third_party_libunwind)
385
386[third_party\protobuf](https://gitee.com/openharmony/third_party_protobuf)
387

README_zh.md

1# hiperf 应用性能优化剖析组件
2
3-   [简介](#简介)
4    -   [架构](#架构)
5
6-   [约束](#约束)
7-   [编译构建](编译构建)
8-   [目录](#目录)
9    -   [使用说明](#使用说明)
10    -   [接口说明](#接口说明)
11-   [相关仓](相关仓)
12
13## 简介
14
15hiperf 是 OpenHarmony 为开发人员提供的用于调试的命令行工具,用于抓取特定程序或者系统的性能数据,类似内核的 perf  工具,该工具支持在 Windows/Linux/Mac 等操作系统上运行。
16
17### 架构
18
19![](figures/hiperf_architecture_zh.png)
20
21## 目录
22
23```
24/developtools/hiperf
25├── demo			# demo 程序
26│   ├── cpp			# C++ demo 程序,示范了如何调用API和模拟的采样场景
27│   └── js			# JS demo 程序,示范了如何调用API
28├── include			# 工程的头文件
29│   └── nonlinux	# 交叉编译的头文件(非linux平台)
30├── interfaces		# 接口忘记
31│   ├── innerkits	# C++ API 接口
32│   └── kits		# JS API 接口
33├── proto			# report 命令导出到proto的数据结构定义
34├── script			# Host 脚本,包括 HTML
35│   └── test		# 脚本的单元测试
36├── src				# 源代码文件夹
37└── test			# 源代码的单元测试
38
39```
40
41## 约束
42
43运行环境条件约束如下
44
45| 依赖组件 | 版本  |
46| -------- | ----- |
47| Python   | 3.7.0 |
48|          |       |
49
50
51
52## 编译构建
53
54#### 基础配置
55
56- 确保组件名在于产品形态配置的 json 中
57  - [产品形态配置](https://gitee.com/openharmony/productdefine_common)
58    - 加入 `"developtools:hiperf":{}` 即可
59
60
61#### 编译命令
62
63| 编译说明                               | 编译参数                            |
64| -------------------------------------- | ----------------------------------- |
65| 只编译当前设备平台的二进制执行文件     | --build-target hiperf_target        |
66| 编译所有的平台的所有组件(包括单元测试) | --build-target hiperf_all           |
67| 编译目标为 x86_64 Linux 平台的工具     | --gn-args "hiperf_target_host=true" |
68| 编译单元测试                           | --build-target hiperf_unittest      |
69| 编译单元测试的接口部分(命令行部分)     | --build-target hiperf_interfacetest |
70
71
72#### 编译输出 ####
73
74| 编译目标          | 运行平台 | 文件位置                                              | 文件名               |
75| ----------------- | -------- | ----------------------------------------------------- | -------------------- |
76| Dev 端命令行程序  | arm      | out\ohos-arm-release\developtools\hiperf\hiperf       | hiperf               |
77|                   | linux    | out\ohos-arm-release\clang_x64\developtools\hiperf    | hiperf               |
78| Host 端命令行程序 | linux    | out\ohos-arm-release\clang_x64\developtools\hiperf    | hiperf_host          |
79|                   | windows  | out\ohos-arm-release\mingw_x86_64\developtools\hiperf | hiperf_host.exe      |
80| Host 端动态库     | linux    | out\ohos-arm-release\clang_x64\developtools\hiperf    | libhiperf_report.so  |
81|                   | windows  | out\ohos-arm-release\mingw_x86_64\developtools\hiperf | libhiperf_report.dll |
82
83也可以在编译完成后
84
85运行 developtools/hiperf/script/package.sh 打包到out文件夹中
86
87```
88host/
89└── developtools
90    ├── hiperf
91    │   ├── bin									# 所有的二进制文件
92    │   │   ├── linux							# linux 平台
93    │   │   │   └── x86_64
94    │   │   │       ├── hiperf_host				# PC运行的执行程序,支持Report和Dump命令
95    │   │   │       └── libhiperf_report.so		# PC运行的LIB文件,供python脚本使用
96    │   │   ├── ohos
97    │   │   │   └── arm							# arm 平台
98    │   │   │       └── hiperf					# 板端执行程序
99    │   │   └── windows							# windows 平台
100    │   │       └── x86_64
101    │   │           ├── hiperf_host.exe			# PC运行的执行程序
102    │   │           └── libhiperf_report.dll	# PC运行的LIB文件
103    │   │
104    │   │										# 下面都是python文件,在PC侧执行
105    │   ├── command_script.py					# hiperf 命令行的包装脚本,产生采样数据
106    │   ├── hiperf_utils.py						# 脚本自己的工具类
107    │   ├── loadlib_test.py						# lib 测试脚本
108    │   ├── make_diff.py						# 产生Diff数据的脚本
109    │   ├── make_report.py						# 从采样数据产生报告的脚本
110    │   ├── recv_binary_cache.py				# 收集符号表的脚本
111    │   └── report.html							# HTML 展示页面的模板
112    └── hiperf.tar.gz							# 上述文件的打包文件
113
114```
115
116
117
118#### 带调试符号的版本
119
120- 在对应的平台out里面找 exe.unstrippedlib.unstripped,例如:
121
122  - out\ohos-arm-release\clang_x64\exe.unstripped\clang_x64\developtools\hiperf
123
124
125
126## 使用说明
127
128### 测试代码
129
130我们在 hiperf_example_cmd.cpp 里面提供了一些测试代码,
131
132用来验证一些采样功能,比如线程调度,内存申请,CPU 负荷等等。
133
134代码位于
135
136```
137hiperf\demo\cpp\hiperf_example_cmd.cpp
138```
139
140测试命令帮助
141
142```
143 ./hiperf_example_cmd --help
144this is a demo test command
145  Use the following commands to simulate different scenarios
146  --help
147    this page
148  --thread <number>
149    setup the thread number, default is 5 second
150  --time <time>
151    setup run sec, default is 10 second
152  --stack <level>
153    setup stack level, default is 5
154  --nowait
155    setup skip the start, default wait the start
156  --dynamic
157    will run some code in each stack level
158  --mmap
159    will run mmap code in the loop
160```
161
162
163
164### 主要的命令格式
165
166```
167hiperf [options] COMMAND [args for command]
168```
169
170
171
172- [options]
173  - 可选的参数
174  - 主要是一些调试命令,如打开log等
175- COMMAND
176  - 必选参数
177  - 子功能的名字,如recrod,report 等等
178- [args for command]
179  - 子功能的参数
180
181### 帮助命令
182
183可以用 --help 查看帮助
184
185```
186--help [command]
187
188[command] --help
189```
190
191以上两种格式都是可以的
192
193### 主命令参数
194
195| 参数                            | 功能说明                         |
196| ------------------------------- | -------------------------------- |
197| --help [command]                | 显示指定功能的帮助信息           |
198| --debug                         | 打开 DEBUG 级别的调试日志        |
199| --verbose                       | 打开 VERBOSE 级别的调试日志      |
200| --much                          | 打开 MUCH 级别的调试日志         |
201| --mixlog                        | 混合调试日志输出到屏幕上(stdout) |
202| --logtag <tagA [,tagB] [,tagC]> | 打开指定模块的MUCH级别的调试日志 |
203| --hilog                         | 日志打印到Hilog中                |
204| --logpath                       | 指定日志保存的路径               |
205| --nodebug                       | 停止打印任何日志                 |
206
207### list 命令
208
209列出设备上支持的所有事件名称
210
211事件名称用于 stat 和 record 的 -e 和 -g 参数
212
213```
214Usage: hiperf list [event type name]
215```
216
217下面列出了设备支持的HW事件,并且会提示哪些事件此设备不支持
218
219```
220./hiperf list hw
221```
222
223### stat 命令
224
225监听指定目标程序,周期性打印性能计数器的值
226
227```
228Usage: hiperf stat [options] [command [command-args]]
229       Collect performance counter information of running [command].
230```
231
232下面展示了一个 stats 监听本进程 在 CPU 0 上 3 秒的性能计数器命令
233
234```
235 ./hiperf stat -d 3 -c 0
236```
237
238### record 命令
239
240采样指定目标程序,并且将采样数据保存到指定的文件中(默认为perf.data)
241
242```
243Usage: hiperf record [options] [command [command-args]]
244       Collect performance sampling information of running [command].
245```
246
247对全系统所有进程采样3秒,并且显示详细的信息
248
249```
250./hiperf record -d 3 -a --verbose
251```
252
253### dump 命令
254
255此命令主要用于以不加以处理的方式直接读取perf.data的数据
256
257开发和测试人员可以核对其中的原始采样数据的正确性。
258
259```
260Usage: hiperf dump [option] \<filename\>
261       Dump specific parts of specified file .
262```
263
264### report 命令
265
266此命令主要用于展示相关采样数据(从perf.data中读取)
267
268并且转换为用户需要的格式(比如Json或者ProtoBuf)
269
270```
271Usage: hiperf dump [option] \<filename\>
272       Dump specific parts of specified file .
273```
274
275范例输出普通报告的命令,限制为占比不超过1%
276
277```
278./hiperf report --limit-percent 1
279```
280
281### 脚本
282
283一般用户用脚本执行采样操作(因为可以简单的产生HTML报告)
284
285##### 采样
286
287command_script.py 完成,他是 report 命令的包装脚本
288
289```
290usage: command_script.py [-h]
291                         (-app PACKAGE_NAME | -lp LOCAL_PROGRAM | -cmd CMD | -p [PID [PID ...]] | -t [TID [TID ...]] | -sw)
292                         [-a ABILITY] [-r RECORD_OPTIONS] [-lib LOCAL_LIB_DIR]
293                         [-o OUTPUT_PERF_DATA] [--not_hdc_root]
294
295Collect performance sampling information of running [command].
296```
297
298对指定包名采样,包名是 com.ohos.launch
299
300```
301python command_script.py -app com.ohos.launch
302```
303
304对特定进程采样,进程名称是 hdcd
305
306```
307python command_script.py -lp hdcd
308```
309
310##### 收集符号表
311
312recv_binary_cache.py 完成,他主要根据 perf.data 里面记录的相关文件和库,以及它们的 buildid 在用户指定的路径中去寻找对应的 ELF 作为符号表文件用于回栈或者打印函数名等。
313
314```
315usage: recv_binary_cache.py [-h] [-i PERF_DATA]
316                            [-l LOCAL_LIB_DIR [LOCAL_LIB_DIR ...]]
317
318Recv binaries needed by perf.data from device to binary_cache directory.
319```
320
321指定了2个符号表路径的位置
322
323```
324python recv_binary_cache.py -l Z:\OHOS_MASTER\out\ohos-arm-release\lib.unstripped  Z:\OHOS_MASTER\out\ohos-arm-release\exe.unstripped
325```
326
327对应的符号表文件会复制到 binary_cache 文件夹里面
328
329优先检查用户给出的符号表位置,如果没有则复制设备中的文件
330
331##### 展示
332
333make_report.py 完成,将采样后的数据导出为HTML展示页面
334
335```
336usage: make_report.py [-h] [-i PERF_DATA] [-r REPORT_HTML]
337
338To make a report, you need to enter the data source and the path of the
339report.
340```
341
342产生HTML文件,默认的文件名是 hiperf_report.html
343
344```
345python make_report.py
346```
347
348- 展示页面首页
349
350![](figures/hiperf_homepage.png)
351
352- 展示页面火焰图
353
354![](figures/hiperf_flame.png)
355
356## 常见故障说明
357
358#### Can't find hdc_std in PATH environment.
359
360```
361python command_script.py -lp ps
362['../..\\..\\platform-tools\\hdc', 'version']
363['hdc', 'version']
364Traceback (most recent call last):
365  File "command_script.py", line 367, in <module>
366    main(parser_add_argument())
367  File "command_script.py", line 361, in main
368    profiler = PerformanceProfile(args)
369  File "command_script.py", line 143, in __init__
370    self.hdc = HdcInterface(root_authority=not args.not_hdc_root)
371  File "Z:\OHOS_MASTER\out\host\developtools\hiperf\hiperf_utils.py", line 173, in __init__
372    raise Exception("Can't find hdc in PATH environment.")
373Exception: Can't find hdc_std in PATH environment.
374```
375
376请确认 PATH 环境变量中有 hdc 的执行文件
377
378确认方法
379
380```
381where hdc_std
382Z:\OHOS_MASTER\developtools\hdc_standard\prebuilt\windows\hdc_std.exe
383Z:\OHOS_STD_2.0\developtools\hdc_standard\prebuilt\windows\hdc_std.exe
384```
385
386
387
388
389## 相关仓
390
391研发工具链子系统
392
393[**developtools\hiperf**](https://gitee.com/openharmony/developtools_hiperf)
394
395[developtools\developtools_profiler](https://gitee.com/openharmony/developtools_profiler)
396
397[developtools\developtools_bytrace_standard](https://gitee.com/openharmony/developtools_bytrace_standard/)
398
399[third_party\libunwind](https://gitee.com/openharmony/third_party_libunwind)
400
401[third_party\protobuf](https://gitee.com/openharmony/third_party_protobuf)
402