是否可以在 Google Apps Script V8 中获取堆栈跟踪

问题描述 投票:0回答:2

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

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

这样我就可以检查那里出了什么问题。如果将堆栈跟踪也放在那里,那就太好了,这样我就可以看到它发生的确切行,而且我不必每次都在第二个context参数中传递一些关于此的标记。

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

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

会产生类似的东西

console.trace
tracer @ js:12

在应用程序脚本中,这会给出

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

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

有什么方法可以在 V8 运行时获取变量中的堆栈跟踪吗?

google-apps-script
2个回答
3
投票

找到了一些使用 throw/catch 的解决方法,看起来有点奇怪,但似乎工作正常

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

2
投票

这是一个小脚本,您可以使用它来获取具有一些格式和缩进的堆栈跟踪

分割后使用

.splice(n)
去掉前几行

const getStackTrace = function(error) {
  let s = `Error: ${error.message}\n`;
  error.stack
       .split('\n')
       .forEach((token) => s += `\t${token.trim()}\n`);      
  return s;
}

try {
    throw new Error("OOPSIES!")
} catch (error) {
    const errorStack = getStackTrace(error)
    console.log(errorStack)
}

© www.soinside.com 2019 - 2024. All rights reserved.