javascript - 以编程方式访问函数位置

标签 javascript google-chrome-devtools v8 console.log

是否可以在代码中访问 google chrome 开发者工具在使用控制台登录函数时显示的 ["[[FunctionLocation]]"] 属性?

最佳答案

目前的答案是

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

上述所有 API 仅供 C++ 代码使用,而非 JavaScript 代码。换句话说,网页上的 JavaScript 代码无法直接访问此信息。

<小时/>

但是,您也许可以使用 Chrome 扩展程序访问这些属性。最近,Chrome 使用的 V8 JavaScript 引擎添加了通过 Chrome DevTools Protocol 访问这些属性的支持。 。特别是可以通过 Runtime.getProperties 获取内部属性称呼。此外,它 seems like Chrome 扩展程序可能能够通过 chrome.debugger 与 DevTools 协议(protocol)进行交互.

在 Node.js 中使用 DevTools 协议(protocol)的概念证明,它可以使用 Inspector 直接访问该协议(protocol)。内置模块(穆罕默德在他们的回答中提到):

global.a = () => { /* test function */ };

const s = new (require('inspector').Session)();
s.connect();

let objectId;
s.post('Runtime.evaluate', { expression: 'a' }, (err, { result }) => {
  objectId = result.objectId;
});
s.post('Runtime.getProperties', { objectId }, (err, { internalProperties }) => {
  console.log(internalProperties);
});

产量

[
  {
    name: '[[FunctionLocation]]',
    value: {
      type: 'object',
      subtype: 'internal#location',
      value: [Object],
      description: 'Object'
    }
  },
  {
    name: '[[Scopes]]',
    value: {
      type: 'object',
      subtype: 'internal#scopeList',
      className: 'Array',
      description: 'Scopes[2]',
      objectId: '{"injectedScriptId":1,"id":24}'
    }
  }
]

使用 Node.js v12.3.1。

关于javascript - 以编程方式访问函数位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41146373/

相关文章:

javascript - 我需要构建类似于此html音频示例的内容

javascript - 从 Chrome 开发者工具复制 HTML 元素对象

javascript - `this` 的默认绑定(bind)与 Chrome 浏览器和 Node.js 不同

javascript - 未定义 >>> 0 == 4294967295?

javascript - 将 C++ 虚拟方法绑定(bind)到具有覆盖功能的 js

php - 新消息到来时如何提醒

Javascript通过递归函数传递变量

JavaScript windows.onscroll 事件

sass - 如何在编辑 SASS 文件后在 Chrome 中自动重新加载 css

google-chrome-devtools - Chrome 开发工具丢失网络历史记录