1# @ohos.hidebug (Debug调试) 2 3> **说明:** 4> 5> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 6 7使用hidebug,可以获取应用内存的使用情况,包括应用进程的静态堆内存(native heap)信息、应用进程内存占用PSS(Proportional Set Size)信息等;可以完成虚拟机内存切片导出,虚拟机CPU Profiling采集等操作。 8 9## 导入模块 10 11```ts 12import hidebug from '@ohos.hidebug'; 13``` 14 15 16## hidebug.getNativeHeapSize 17 18getNativeHeapSize(): bigint 19 20获取本应用堆内存的总大小。 21 22**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 23 24**返回值:** 25 26| 类型 | 说明 | 27| ------ | --------------------------- | 28| bigint | 返回本应用堆内存总大小,单位为Byte。 | 29 30**示例:** 31 ```ts 32 let nativeHeapSize: bigint = hidebug.getNativeHeapSize(); 33 ``` 34 35## hidebug.getNativeHeapAllocatedSize 36 37getNativeHeapAllocatedSize(): bigint 38 39获取本应用堆内存的已分配内存大小。 40 41**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 42 43**返回值:** 44 45| 类型 | 说明 | 46| ------ | --------------------------------- | 47| bigint | 返回本应用堆内存的已分配内存,单位为Byte。 | 48 49 50**示例:** 51 ```ts 52 let nativeHeapAllocatedSize: bigint = hidebug.getNativeHeapAllocatedSize(); 53 ``` 54 55## hidebug.getNativeHeapFreeSize 56 57getNativeHeapFreeSize(): bigint 58 59获取本应用堆内存的空闲内存大小。 60 61**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 62 63**返回值:** 64 65| 类型 | 说明 | 66| ------ | ------------------------------- | 67| bigint | 返回本应用堆内存的空闲内存,单位为Byte。 | 68 69**示例:** 70 ```ts 71 let nativeHeapFreeSize: bigint = hidebug.getNativeHeapFreeSize(); 72 ``` 73 74## hidebug.getPss 75 76getPss(): bigint 77 78获取应用进程实际使用的物理内存大小。 79 80**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 81 82**返回值:** 83 84| 类型 | 说明 | 85| ------ | ------------------------- | 86| bigint | 返回应用进程实际使用的物理内存大小,单位为kB。 | 87 88**示例:** 89 ```ts 90 let pss: bigint = hidebug.getPss(); 91 ``` 92 93## hidebug.getSharedDirty 94 95getSharedDirty(): bigint 96 97获取进程的共享脏内存大小。 98 99**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 100 101**返回值:** 102 103| 类型 | 说明 | 104| ------ | -------------------------- | 105| bigint | 返回进程的共享脏内存大小,单位为kB。 | 106 107 108**示例:** 109 ```ts 110 let sharedDirty: bigint = hidebug.getSharedDirty(); 111 ``` 112 113## hidebug.getPrivateDirty<sup>9+<sup> 114 115getPrivateDirty(): bigint 116 117获取进程的私有脏内存大小。 118 119**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 120 121**返回值:** 122 123| 类型 | 说明 | 124| ------ | -------------------------- | 125| bigint | 返回进程的私有脏内存大小,单位为kB。 | 126 127**示例:** 128 ```ts 129 let privateDirty: bigint = hidebug.getPrivateDirty(); 130 ``` 131 132## hidebug.getCpuUsage<sup>9+<sup> 133 134getCpuUsage(): number 135 136获取进程的CPU使用率。 137 138如占用率为50%,则返回0.5。 139 140**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 141 142**返回值:** 143 144| 类型 | 说明 | 145| ------ | -------------------------- | 146| number | 获取进程的CPU使用率。 | 147 148 149**示例:** 150 ```ts 151 let cpuUsage: number = hidebug.getCpuUsage(); 152 ``` 153 154## hidebug.getServiceDump<sup>9+<sup> 155 156getServiceDump(serviceid : number, fd : number, args : Array\<string>) : void 157 158获取系统服务信息。 159 160**需要权限**: ohos.permission.DUMP 161 162**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 163 164**参数:** 165 166| 参数名 | 类型 | 必填 | 说明 | 167| -------- | ------ | ---- | ------------------------------------------------------------ | 168| serviceid | number | 是 | 基于该用户输入的service id获取系统服务信息。| 169| fd | number | 是 | 文件描述符,该接口会往该fd中写入数据。| 170| args | Array\<string> | 是 | 系统服务的Dump接口所对应的参数列表。| 171 172**错误码:** 173 174以下错误码的详细介绍请参见[Hidebug错误码](../errorcodes/errorcode-hiviewdfx-hidebug.md)。 175 176| 错误码ID | 错误信息 | 177| ------- | ----------------------------------------------------------------- | 178| 11400101 | the service id is invalid | 179| 401 | the parameter check failed | 180 181**示例:** 182 183```ts 184import UIAbility from '@ohos.app.ability.UIAbility'; 185import fs from '@ohos.file.fs'; 186import hidebug from '@ohos.hidebug'; 187import common from '@ohos.app.ability.common'; 188import { BusinessError } from '@ohos.base'; 189 190export default class HidebugTest extends UIAbility { 191 public testfunc() { 192 let applicationContext: common.Context | null = null; 193 try { 194 applicationContext = this.context.getApplicationContext(); 195 } catch (error) { 196 console.info(`error code: ${(error as BusinessError).code}, error msg: ${(error as BusinessError).message}`); 197 } 198 199 let filesDir: string = applicationContext!.filesDir; 200 let path: string = filesDir + "/serviceInfo.txt"; 201 console.info("output path: " + path); 202 let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 203 let serviceId: number = 10; 204 let args: Array<string> = new Array("allInfo"); 205 206 try { 207 hidebug.getServiceDump(serviceId, file.fd, args); 208 } catch (error) { 209 console.info(`error code: ${(error as BusinessError).code}, error msg: ${(error as BusinessError).message}`); 210 } 211 fs.closeSync(file); 212 } 213} 214 215let t = new HidebugTest(); 216t.testfunc(); 217``` 218 219## hidebug.startJsCpuProfiling<sup>9+</sup> 220 221startJsCpuProfiling(filename : string) : void 222 223启动虚拟机Profiling方法跟踪,`startJsCpuProfiling()`方法的调用需要与`stopJsCpuProfiling()`方法的调用一一对应,先开启后关闭,严禁使用`start->start->stop`,`start->stop->stop`,`start->start->stop->stop`等类似的顺序调用。 224 225**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 226 227**参数:** 228 229| 参数名 | 类型 | 必填 | 说明 | 230| -------- | ------ | ---- | ------------------------------------------------------------ | 231| filename | string | 是 | 用户自定义的profiling文件名,根据传入的`filename`,将在应用的`files`目录生成`filename.json`文件。 | 232 233**错误码:** 234 235以下错误码的详细介绍请参见[通用错误码](../errorcodes/errorcode-universal.md)。 236 237| 错误码ID | 错误信息 | 238| ------- | ----------------------------------------------------------------- | 239| 401 | the parameter check failed | 240 241**示例:** 242 243```ts 244import hidebug from '@ohos.hidebug'; 245import { BusinessError } from '@ohos.base'; 246 247try { 248 hidebug.startJsCpuProfiling("cpu_profiling"); 249 // ... 250 hidebug.stopJsCpuProfiling(); 251} catch (error) { 252 console.info(`error code: ${(error as BusinessError).code}, error msg: ${(error as BusinessError).message}`); 253} 254``` 255 256## hidebug.stopJsCpuProfiling<sup>9+</sup> 257 258stopJsCpuProfiling() : void 259 260停止虚拟机Profiling方法跟踪,`startJsCpuProfiling()`方法的调用需要与`stopJsCpuProfiling()`方法的调用一一对应,先开启后关闭,严禁使用`start->start->stop`,`start->stop->stop`,`start->start->stop->stop`等类似的顺序调用。 261 262**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 263 264**参数:** 265 266| 参数名 | 类型 | 必填 | 说明 | 267| -------- | ------ | ---- | ------------------------------------------------------------ | 268| filename | string | 是 | 用户自定义的profiling文件名,根据传入的`filename`,将在应用的`files`目录生成`filename.json`文件。 | 269 270**示例:** 271 272```ts 273import hidebug from '@ohos.hidebug'; 274import { BusinessError } from '@ohos.base'; 275 276try { 277 hidebug.startJsCpuProfiling("cpu_profiling"); 278 // ... 279 hidebug.stopJsCpuProfiling(); 280} catch (error) { 281 console.info(`error code: ${(error as BusinessError).code}, error msg: ${(error as BusinessError).message}`); 282} 283``` 284 285## hidebug.dumpJsHeapData<sup>9+</sup> 286 287dumpJsHeapData(filename : string) : void 288 289虚拟机堆导出。 290 291**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 292 293**参数:** 294 295| 参数名 | 类型 | 必填 | 说明 | 296| -------- | ------ | ---- | ------------------------------------------------------------ | 297| filename | string | 是 | 用户自定义的虚拟机堆文件名,根据传入的`filename`,将在应用的`files`目录生成`filename.heapsnapshot`文件。 | 298 299**错误码:** 300 301以下错误码的详细介绍请参见[通用错误码](../errorcodes/errorcode-universal.md)。 302 303| 错误码ID | 错误信息 | 304| ------- | ----------------------------------------------------------------- | 305| 401 | the parameter check failed | 306 307**示例:** 308 309```ts 310import hidebug from '@ohos.hidebug'; 311import { BusinessError } from '@ohos.base'; 312 313try { 314 hidebug.dumpJsHeapData("heapData"); 315} catch (error) { 316 console.info(`error code: ${(error as BusinessError).code}, error msg: ${(error as BusinessError).message}`); 317} 318``` 319 320## hidebug.startProfiling<sup>(deprecated)</sup> 321 322startProfiling(filename : string) : void 323 324> **说明:** 从 API Version 9 开始废弃,建议使用[hidebug.startJsCpuProfiling](#hidebugstartjscpuprofiling9)替代。 325 326启动虚拟机Profiling方法跟踪,`startProfiling()`方法的调用需要与`stopProfiling()`方法的调用一一对应,先开启后关闭,严禁使用`start->start->stop`,`start->stop->stop`,`start->start->stop->stop`等类似的顺序调用。 327 328**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 329 330**参数:** 331 332| 参数名 | 类型 | 必填 | 说明 | 333| -------- | ------ | ---- | ------------------------------------------------------------ | 334| filename | string | 是 | 用户自定义的profiling文件名,根据传入的`filename`,将在应用的`files`目录生成`filename.json`文件。 | 335 336**示例:** 337 338```ts 339hidebug.startProfiling("cpuprofiler-20220216"); 340// code block 341// ... 342// code block 343hidebug.stopProfiling(); 344``` 345 346## hidebug.stopProfiling<sup>(deprecated)</sup> 347 348stopProfiling() : void 349 350> **说明:** 从 API Version 9 开始废弃,建议使用[hidebug.stopJsCpuProfiling](#hidebugstopjscpuprofiling9)替代。 351 352停止虚拟机Profiling方法跟踪,`stopProfiling()`方法的调用需要与`startProfiling()`方法的调用一一对应,先开启后关闭,严禁使用`start->start->stop`,`start->stop->stop`,`start->start->stop->stop`等类似的顺序调用。 353 354**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 355 356**示例:** 357 358```ts 359hidebug.startProfiling("cpuprofiler-20220216"); 360// code block 361// ... 362// code block 363hidebug.stopProfiling(); 364``` 365 366## hidebug.dumpHeapData<sup>(deprecated)</sup> 367 368dumpHeapData(filename : string) : void 369 370> **说明:** 从 API Version 9 开始废弃,建议使用[hidebug.dumpJsHeapData](#hidebugdumpjsheapdata9)替代。 371 372虚拟机堆导出。 373 374**系统能力:** SystemCapability.HiviewDFX.HiProfiler.HiDebug 375 376**参数:** 377 378| 参数名 | 类型 | 必填 | 说明 | 379| -------- | ------ | ---- | ------------------------------------------------------------ | 380| filename | string | 是 | 用户自定义的虚拟机堆文件名,根据传入的`filename`,将在应用的`files`目录生成`filename.heapsnapshot`文件。 | 381 382**示例:** 383 384```ts 385hidebug.dumpHeapData("heap-20220216"); 386``` 387