我有一个相当特殊的调试问题,因为我的Node应用程序本身就是一个Node调试器(应用程序的一个部分将为调试另一个部分提供调试接口)。
我熟悉以下文档中记录的V8调试协议:
https://code.google.com/p/v8/wiki/DebuggerProtocol
以及使用它的多种工具(包括Node,node-inspector和其他许多内部调试器)。如果我必须通过网络连接与该API通信,就像所有现有工具似乎一样,我可以这样做,但我不是因为一些原因。我已经在进程中,希望避免在所有情况下打开调试端口和网络开销(这是我的生产环境的一部分),并且我想从调试中恢复Javascript对象API,而不是通过JSON API获得的JSON-ified版本(缺少一些保真度)。
V8调试器文档说:"有两个API:使用JavaScript对象的基于函数的API和使用基于JSON的协议的基于消息的API。基于函数的API可以由进程内调试器代理使用,而基于消息的API也可以在进程外使用。"
使用JavaScript对象的基于函数的API听起来就像我需要的那样,但我在V8文档中没有看到关于此API或如何使用它的其他内容。我也无法看到如何从Node.js访问此API(或一般的V8)。这是可能的,如果是的话,怎么样?
答案 0 :(得分:6)
它永远不会失败。整日研究。发布到SO。 10分钟后找到答案。
使用以下参数启动Node.js:--expose-debug-as=v8debug
毫不奇怪,将V8调试状态公开为可以引用的模块:
var debug = v8debug.Debug;
var scripts = debug.scripts();
仍然整理出大量的JS入口点以及它们如何与已发布的API对齐,但我认为我的主要问题或多或少得到解决。