调试工具 - Debug

# Debug **\[Pro 8.7.0新增\]** Debug模块提供了一些调试工具,比如诊断内存泄露,获取一个Error的详细堆栈等。 ## $debug.dumpHprof(file) * `file` {string} dump文件路径 将整个脚本进程的内存dump到文件file中。 当你发现Auto.js Pro占用内存很高时,你可以运行这个函数来dump整个内存并反馈给开发者,开发者可以通过内存dump文件来诊断是否有内存泄露。 dump过程中整个进程将会卡死,此时请不要操作手机,以便造成dump失败或其他问题等;dump一般需要几十秒到几分钟时间,请耐心等待。 > 如何将文件发送给开发者?您可以附上您的脚本和dump文件,发送给邮箱 hybbbb1996@gmail.com,开发者将尽快排查和回复。另外建议在反馈之前,通过`$debug.setMemoryLeakDetectionEnabled()`函数来开启内存泄露检查,排查脚本中的内存泄露,防止乌龙,减少开发者的工作量。 ```javascript $debug.dumpHprof('./dump.hprof'); ``` ## $debug.dumpAndSendHprof([file]) * `file` {string} dump文件路径,可选。默认为当前目录下的`dump.hprof.zip`。 将整个脚本进程的内存dump到文件file中,并自动压缩为zip文件。使用压缩程度最高的压缩等级,因此需要的时间更久,但文件更小。 更多信息参见`$debug.dumpHprof`。 ## $debug.getStackTrace(error) * `error` {Error} 异常/错误 * 返回 {string} 获取一个异常的详细堆栈并返回。 ```javascript try { undefined_var; } catch(e) { console.error($debug.getStackTrace(e)); } ``` ## $debug.setMemoryLeakDetectionEnabled(enabled) * `enabled` {boolean} 是否启用内存泄露检测 启用内存泄露检测后,将会在日志中打印没有手动回收的对象,比如图片对象。 目前检测的对象包括: * 图片图像 例如以下代码将会造成内存泄露,运行后一段时间应该在日志中看到泄露日志。 ```javascript $debug.setMemoryLeakDetectionEnabled(true); requestScreenCapture(); for (let i = 0; i < 10; i++) { // 这个图片本应手动调用recycle回收 let leak = captureScreen().clone(); // 我们故意注释掉回收的代码 // leak.recycle(); } // 触发gc $debug.gc(); ``` > 在Auto.js Pro运行时,此功能默认开启;在打包软件中,此功能默认关闭。 ## $debug.gc() 建议JVM进行垃圾回收(并不一定进行垃圾回收)。