JSVM,既标准JS引擎,是严格遵守Ecmascript规范的JavaScript代码执行引擎。 详情参考: JSVM 。
基于JSVM的JS代码调试调优能力包括:Debugger、CPU Profiler、Heap Snapshot、Heap Statistics。涉及以下接口:
接口名 | 接口功能 |
---|---|
OH_JSVM_GetVM | 将检索给定环境的虚拟机实例。 |
OH_JSVM_GetHeapStatistics | 返回一组虚拟机堆的统计数据。 |
OH_JSVM_StartCpuProfiler | 创建并启动一个CPU profiler。 |
OH_JSVM_StopCpuProfiler | 停止CPU profiler并将结果输出到流。 |
OH_JSVM_TakeHeapSnapshot | 获取当前堆快照并将其输出到流。 |
OH_JSVM_OpenInspector | 在指定的主机和端口上激活inspector,将用来调试JS代码。 |
OH_JSVM_CloseInspector | 尝试关闭剩余的所有inspector连接。 |
OH_JSVM_WaitForDebugger | 等待主机与inspector建立socket连接,连接建立后程序将继续运行。发送Runtime.runIfWaitingForDebugger命令。 |
本文将介绍调试、CPU Profiler、Heap Snapshot的使用方法。
调试能力使用方法
调试步骤
- 在应用工程配置文件module.json中配置网络权限:
"requestPermissions": [{
"name": "ohos.permission.INTERNET",
"reason": "$string:app_name",
"usedScene": {
"abilities": [
"FromAbility"
],
"when": "inuse"
}
}]
- 为避免debugger过程中的暂停被误报为无响应异常,可以 开启DevEco Studio的Debug模式 (无需设置断点),或者可以在非主线程的其他线程中运行JSVM。
- 在执行JS代码之前,调用OH_JSVM_OpenInspector在指定的主机和端口上激活inspector,创建socket。例如OH_JSVM_OpenInspector(env, “localhost”, 9225),在端侧本机端口9225创建socket。
- 调用OH_JSVM_WaitForDebugger,等待建立socket连接。
- 检查端侧端口是否打开成功。hdc shell “netstat -anp | grep 9225”。结果为9225端口状态为“LISTEN"即可。
- 转发端口。hdc fport tcp:9229 tcp:9225。转发PC侧端口9229到端侧端口9225。结果为"Forwardport result:OK"即可。
- 在chrome浏览器地址栏输入"localhost:9229/json",回车。获取端口连接信息。拷贝"devtoolsFrontendUrl"字段url内容到地址栏,回车,进入DevTools源码页,将看到在应用中通过OH_JSVM_RunScript执行的JS源码,此时暂停在第一行JS源码处。
- 用户可在源码页打断点,通过按钮发出各种调试命令控制JS代码执行,并查看变量。
- 调用OH_JSVM_CloseInspector关闭inspector,结束socket连接。
示例代码
#include "ark_runtime/jsvm.h"
#include <string>
using namespace std;
// 待调试的JS源码
static string srcDebugger = R"JS(
const conca