是否有可能在Google Apps Script V8中获得堆栈跟踪



我正在尝试构建自定义错误/警告处理程序,当一些特殊断言失败时会给我发送电子邮件,简单的类

function MailError(message, context){
MailApp.sendEmail(...
}

这样我就可以检查哪里出错了。如果把堆栈跟踪也放在那里就好了,这样我就可以看到它发生的确切位置,而且我不必每次在第二个上下文参数中都传递一些标记。

在javascript中,我们可以使用console.log来获取堆栈跟踪,例如

(function tracer() { console.trace()}) ()

会产生类似

的内容
console.trace
tracer @ js:12

在apps脚本中,这将给

Exception: ScriptError TypeError: console.trace is not a function 

,因为它显然没有实现。此外,它在控制台上打印,而我需要它在变量中通过电子邮件发送给我。

任何方法获得堆栈跟踪变量,在V8运行时?

发现一些使用throw/catch的解决方案,看起来有点奇怪,但似乎工作得很好

function MailError(message){
try {
throw new Error(message)
} catch(e) {
MailApp.sendEmail(MY_EMAIL, "[Error] " + message, e.stack)
}
}

//with some formatting and indentation
//strip off the first few lines using .splice(n) after split
const __getStackTrace__ = function(message) {
let s = `Error: ${message}n`;
(new Error()).stack
.split('n')
.forEach((token)=>
{s += `t${token.trim()}n`}
);      
return s;
}

}

最新更新