通过 .NET (ClearScript) 与 Chrome V8 调试器协议交互

Interacting with the Chrome V8 debugger protocol through .NET (ClearScript)

我正在维护一个企业 C# 应用程序,它通过用户定义的 JavaScript 函数提供最终用户可扩展性(公开了 select 几个 C# types/proxies)(想想金融算法).

我们使用 ClearScript 评估这些函数(之前我们使用另一个名为 Noesis 的库,但我们已经放弃了)。

我想为 最终用户 提供一种方法来执行非常基本的脚本调试(通过 Web 界面)。至少 - 检查变量和步骤 over/into 函数。

当应用程序在本地 运行 时,我已经通过 Chrome 成功连接到 ClearScript 引擎,并且能够单步执行脚本 - 但是我认为这不会由于各种原因 运行 在生产中对最终用户有意义:

我真正想要的是 V8 调试器的 SignalR 接口——网络应用程序将与 SignalR 交互,而 SignalR 将与 V8 调试器交互。

这是一个基于 web-socket 的协议 - 尽管您必须先通过 HTTP 发出请求以检索 tabId(请求 /json/list

https://chromedevtools.github.io/devtools-protocol/1-2/Debugger 描述了协议 - 有针对不同版本 Chrome 的不同修订,但 1.2(稳定)似乎适用于我使用的 ClearScript 版本。

除了 websocket 上的 request-response(命令)类型交互,V8 还将发布事件——例如Debugger.scriptParsed & Debugger.paused 在同一个插座上。

一些关键命令: Runtime.enable Debugger.enable Runtime.runIfWaitingForDebugger Debugger.getScriptSource Debugger.resume Debugger.evaluateOnCallFrame Runtime.getProperties

我写了一个小的演示项目https://github.com/flakey-bit/ClearScriptDebugging/,它显示了目标进程正在被另一个进程调试。

如果你提到Chrome和Nodejs,你可能知道Nodejs、Chrome和Edge自然支持WebSocket。 Chrome 和所有安全选项的 Edge 更好。对于 Nodejs,你可以找到像 socket.io 这样的标准库 对于服务器端 DotNet WebSocket WebSocket 协议是今天的通用语言。