【问题标题】:Getting stack trace for an error when running code from the console in Chrome在 Chrome 中从控制台运行代码时获取错误堆栈跟踪
【发布时间】:2011-10-18 19:38:34
【问题描述】:

我正在从控制台调用一个函数,但是当它引发异常时,我没有像正常执行代码那样收到堆栈跟踪。

有没有办法可以修改我的命令(可能使用 try/catch),让它为我提供这些信息?

澄清:

page.js:

function otherStuff() { return ['a','b',undefined,'c'];
function doStuff() {
    var x = otherStuff();
    var z = parseInt(x[2]); // this will throw an error
}

控制台,加载链接page.js的html页面后

> otherStuff();

我从返回给我的错误中没有得到任何行号。从页面(而不是控制台)运行它时,我会收到一个行号和一个堆栈跟踪。

【问题讨论】:

  • 命令是什么?什么版本的铬? (你母亲的娘家姓?)

标签: javascript google-chrome stack-trace


【解决方案1】:

虽然很冗长,但这会在 Chrome JS 控制台中打印交互式错误的堆栈跟踪:

try { 
    throw new Error(); 
} catch (e) { 
    console.error(e.stack); 
}

很遗憾,如果抛出非Error 对象,这将不起作用。

【讨论】:

  • 这很好用。数据的格式不同,但都在那里(对我来说最重要的是行号)。如果抛出非Error 对象,我的堆栈跟踪信息将丢失,对吗?因为在这种情况下我们是从Error 对象中检索它
  • 是的,对于任何不基于 JS 标准错误对象的自定义错误对象都是如此。我尝试在 throw 输入字符串时在 catch 子句中设置断点,试图查看 Chrome 是否在内部创建了某种可以使用的适当异常对象——恐怕没有这样的运气。
  • 请注意:MobileSafari 似乎没有为其错误提供“堆栈”属性。
【解决方案2】:

您的代码中有错误。

您缺少右大括号:

function otherStuff() { return ['a','b',undefined,'c']; //} where am i?
function doStuff() {
    var x = otherStuff();
    var z = parseInt(x[2]); // this will throw an error
}

支点:

parseInt(undefined)会抛出错误。例如:http://jsfiddle.net/maniator/Zequj/2/

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2022-12-23
    • 2017-10-24
    • 1970-01-01
    • 2015-11-09
    • 2011-12-04
    • 2013-04-18
    • 2019-12-18
    • 2011-12-19
    相关资源
    最近更新 更多