【问题标题】:How to get the current function's name or linenumbers in V8如何在 V8 中获取当前函数名或行号
【发布时间】:2015-06-23 06:24:05
【问题描述】:

我想在V8中动态挂钩当前执行函数的信息。

例如函数名、行号或文件名等

当页面或应用程序在其中运行时,V8 是否可以设置一些断点来获取这些信息?

例如:

< script >
  function f1() {
    ...
    f2();
    ...
  }

function f2() {
  ...
}
f1(); 
< /script>

f1()执行时,获取f1的函数名和行号;然后f1()调用f2(),f2()正在执行,得到f2的函数名和行号;最后,当 f2() 完成后,返回 f1(),获取 f1() 的函数名和行号。

这就是我所说的“关于 V8 中当前执行函数的信息”。

【问题讨论】:

  • 内容对齐

标签: javascript function v8 line-numbers


【解决方案1】:

你可以使用 new Error().stack 然后解析输出。

(function() {
    var b = function() {
        var trace = new Error().stack.split("\n")[1];
        console.log(trace);
    };

    var a = function() {
        b();
    };

    a();
})();

输出:

at b (file:///home/inonit/tmp/stack.html:6:16)

如果你愿意,你可以从那里提取文件名、函数名、行号和列号。

【讨论】:

  • 感谢您的回答。但我想知道是否可以在 V8 中设置一些断点来获取这些信息,而不是在脚本中添加“new Error().stack”?
  • 不清楚您所说的“v8 中的断点”是什么意思。您何时需要此信息?
  • 我在使用 GDB 动态调试 Web 应用程序时需要该信息。我想知道 V8 是否可以在应用程序运行时在某处设置断点以获取此信息。
  • 好吧,如果您正在使用 GDB 并且已经深入了解了那里,我想您可以弄清楚 stack 属性是如何工作的,然后弄清楚如何检索信息。但是不,很遗憾,我不知道你的问题的答案。
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 2012-09-15
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 2012-08-24
相关资源
最近更新 更多