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进行垃圾回收(并不一定进行垃圾回收)。