以编程方式访问功能位置

时间:2016-12-14 15:32:38

标签: google-chrome google-chrome-devtools console.log

在代码中是否可以访问Google Chrome开发人员工具在使用控制台日志功能时显示的["[[FunctionLocation]]"]属性?

3 个答案:

答案 0 :(得分:24)

目前,答案是

您在Inspector中看到的[[FunctionLocation]]属性将添加到调试器的C ++代码V8Debugger::internalProperties()中,该代码使用另一个C ++函数V8Debugger::functionLocation()来收集有关该函数的信息。 functionLocation()然后使用许多特定于V8的C ++ API(例如v8::Function::GetScriptLineNumber() and GetScriptColumnNumber())来查找确切信息。

上述所有API仅适用于C ++代码,而不适用于JavaScript代码。如果您尝试在Node.js这样的平台上完成此任务,那么您应该能够编写本机模块。如果没有,那你就不走运了。

答案 1 :(得分:3)

我知道这个问题已经发布了一段时间。现在,我遇到了同样的问题。我需要在运行时访问函数位置。

幸运的是,NodeJS在inspector模块中公开了一些v8内部属性,因此表现出色。

我编写了一个名为func-loc的小模块,该模块有助于在运行时检索函数位置。

示例:

const { locate } = require('func-loc');

const fn = () => {
  console.log('Hello there');
};

(async () => {
  const result = await locate(fn);
  console.log(result);
  // Will result: { source: 'file://__BASE_FOLDER__/func-loc/this-file.js', line: 3, column: 12 }
})();

希望有帮助。

答案 2 :(得分:0)

console.log可以使用limited language support在Chrome中显示功能名称。

我发现函数名在调试回调和使用observer pattern时很有用。请注意,这需要命名函数才能工作(匿名函数名称显然是空白的)。

function myFn() {}

if (typeof myFn === 'function') {
  console.log('Name of function', myFn.name)
}

输出Name of function myFn