资讯专栏INFORMATION COLUMN

Get stack trace in JavaScript (v8 only)

张汉庆 / 3393人阅读

摘要:原理就是利用以及特有的使用这种方法可以获取到相当多的信息比如函数所在的文件的文件名行号列号等等不过缺点是只有支持其他浏览器可以利用来追溯调用栈直接上代码使用

原理就是利用Error, 以及v8特有的API: JavaScript stack trace API.
使用这种方法可以获取到相当多的信息,
比如函数所在的文件的文件名, 行号列号等等...
不过缺点是只有v8支持.
其他浏览器可以利用arguments.caller来追溯调用栈.

直接上代码:

// hook the prepare function
Error.prepareStackTrace=function(err,stack){
  // err: the Error object.
  // stack: stack info, an array of `CallSite`.
  // return full info of the stack.
  return stack;
};

// trace function
function trace(){
  var obj={};
  Error.captureStackTrace(obj);
  // or just use: var obj=new Error();
  var stack=obj.stack;
  // remove this function from stack
  stack=stack.slice(1);
  return stack;
}

使用:

(function callee(){
  console.assert(trace()[0].getFunction()===callee);
})();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85344.html

相关文章

  • V8 的 Error 对象与栈追踪的妙用

    摘要:现状最近在写欢迎的时候,一直为错误的栈追踪而愁。由于送入队列的是函数,因此在的参数可以放心地使用。其次,这些函数并不是立即在中调用的,而是由专门的队列处理代码来调用。 本文的讲述都是以 Node.js 环境为例子,而 Node.js 使用的 JavaScript 引擎是 V8,因此理论上 Chrome 也能适用,其它浏览器我就不清楚了。 现状 最近在写 Rize(欢迎 star) 的时...

    Luosunce 评论0 收藏0
  • 关于Error.captureStackTrace

    摘要:在一些程序中,有时会看到这一语句,用于处理堆栈信息。为了不向使用者暴露自定义类的内部细节,在自定义类内部使用时,往往会传入参数,其值即为自定义类的构造函数。 在一些Node.js程序中,有时会看到Error.captureStackTrace()这一语句,用于处理堆栈信息。该语句的标准定义是什么?如何使用?本文将就这些问题做一些探讨。 标准定义 从字面上来看,captureStackT...

    weakish 评论0 收藏0
  • 全面掌握Node命令选项

    摘要:译者按作为开发者,有必要全面了解一下命令的所有选项,这样在关键时刻才能得心应手。命令有很多选项,可以用于调试代码。这篇博客全面介绍了命令,可以提高大家的工作效率。访问官方文档,可以查看命令的所有选项。 译者按: 作为Node.js开发者,有必要全面了解一下Node命令的所有选项,这样在关键时刻才能得心应手。 原文: Mastering the Node.js CLI & Comma...

    raise_yang 评论0 收藏0
  • 全面掌握Node命令选项

    摘要:译者按作为开发者,有必要全面了解一下命令的所有选项,这样在关键时刻才能得心应手。命令有很多选项,可以用于调试代码。这篇博客全面介绍了命令,可以提高大家的工作效率。访问官方文档,可以查看命令的所有选项。 译者按: 作为Node.js开发者,有必要全面了解一下Node命令的所有选项,这样在关键时刻才能得心应手。 原文: Mastering the Node.js CLI & Comma...

    guqiu 评论0 收藏0
  • [译] JavaScript 性能优化杀手

    摘要:原文引言这篇文档包含了如何避免使代码性能远低于预期的建议尤其是一些会导致牵涉到等无法优化相关函数的问题一些背景在中并没有解释器但却有两个不同的编译器通用编译器和优化编译器这意味着你的代码总是会被编译为机器码后直接运行这样一定很快咯并不是 原文:http://dev.zm1v1.com/2015/08/19/javascript-optimization-killers/引言 这篇文档包...

    MockingBird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<