debug - 调试工具

2022年10月22日

debug - 调试工具

[Pro 8.7.0新增]

Debug模块提供了一些调试工具,比如诊断内存泄露,获取一个Error的详细堆栈等。

$debug.dumpHprof(file)

  • file {string} dump文件路径

将整个脚本进程的内存dump到文件file中。

当你发现CloudControl Pro占用内存很高时,你可以运行这个函数来dump整个内存并反馈给开发者,开发者可以通过内存dump文件来诊断是否有内存泄露。

dump过程中整个进程将会卡死,此时请不要操作手机,以便造成dump失败或其他问题等;dump一般需要几十秒到几分钟时间,请耐心等待。

提示

如何将文件发送给开发者?您可以附上您的脚本和dump文件,发送给邮箱 2874662633@qq.com,开发者将尽快排查和回复。另外建议在反馈之前,通过$debug.setMemoryLeakDetectionEnabled()函数来开启内存泄露检查,排查脚本中的内存泄露,防止乌龙,减少开发者的工作量。

$debug.dumpHprof('./dump.hprof');

$debug.dumpAndSendHprof([file])

  • file {string} dump文件路径,可选。默认为当前目录下的dump.hprof.zip

将整个脚本进程的内存dump到文件file中,并自动压缩为zip文件。使用压缩程度最高的压缩等级,因此需要的时间更久,但文件更小。

更多信息参见$debug.dumpHprof

$debug.getStackTrace(error)

  • error {Error} 异常/错误
  • 返回 {string}

获取一个异常的详细堆栈并返回。

try {
    undefined_var;
} catch(e) {
    console.error($debug.getStackTrace(e));
}

$debug.setMemoryLeakDetectionEnabled(enabled)

  • enabled {boolean} 是否启用内存泄露检测

启用内存泄露检测后,将会在日志中打印没有手动回收的对象,比如图片对象。

目前检测的对象包括:

  • 图片图像

例如以下代码将会造成内存泄露,运行后一段时间应该在日志中看到泄露日志。


$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();

for (let i = 0; i < 10; i++) {
    // 这个图片本应手动调用recycle回收
    let leak = captureScreen().clone();

    // 我们故意注释掉回收的代码
    // leak.recycle();
}
// 触发gc
$debug.gc();

提示

在CloudControl Pro运行时,此功能默认开启;在打包软件中,此功能默认关闭。

$debug.gc()

建议JVM进行垃圾回收(并不一定进行垃圾回收)。

上次编辑于:
贡献者: Bruce