怎么可以从Node.js应用程序与基于函数的V8调试API进行通信?

Bob*_*son 1 v8 node.js

我有一个相当特殊的调试问题,因为我的Node应用程序本身就是一个Node调试器(应用程序的一个部分将为调试另一个部分提供调试接口).

我熟悉以下文档中记录的V8调试协议:

https://code.google.com/p/v8/wiki/DebuggerProtocol

以及使用它的多种工具(包括Node中的内部调试器,节点检查器和许多其他工具).如果我必须通过网络连接与该API通信,就像所有现有工具似乎一样,我可以这样做,但我宁愿不出于几个原因.我已经在进程中,希望避免在所有情况下打开调试端口和网络开销(这是我的生产环境的一部分),并且我想从调试API中获取Javascript对象,而不是您通过JSON API获得的JSON-ified版本(缺少一些保真度).

V8调试器文档说:"有两个API:基于函数的API使用JavaScript对象和基于消息的API使用基于JSON的协议.基于函数的API可以由进程内调试器代理使用,而消息基于API的API也可以在进程外使用."

使用JavaScript对象的基于函数的API听起来就像我需要的那样,但我在V8文档中没有看到关于此API或如何使用它的其他内容.我也无法看到如何从Node.js访问此API(或一般的V8).这是可能的,如果是这样,怎么样?

Bob*_*son 6

它永远不会失败.整日研究.发布到SO.10分钟后找到答案.

使用此参数启动Node.js: --expose-debug-as=v8debug

毫无疑问,这会将V8调试状态公开为可以参考的模块:

var debug = v8debug.Debug;
var scripts = debug.scripts();
Run Code Online (Sandbox Code Playgroud)

仍然整理出一堆JS入口点以及它们如何与已发布的API对齐,但我认为我的主要问题或多或少得到了解决.