【问题标题】:Interacting with the Chrome V8 debugger protocol through .NET (ClearScript)通过 .NET (ClearScript) 与 Chrome V8 调试器协议交互
【发布时间】:2019-10-06 00:29:00
【问题描述】:

我正在维护一个企业 C# 应用程序,该应用程序通过用户定义的 JavaScript 函数(暴露了一些 C# 类型/代理)为最终用户提供可扩展性(想想金融算法)。

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

我想为最终用户提供一种方法来执行非常基本的脚本调试(通过网络界面)。至少 - 检查变量并单步执行/进入函数。

在本地运行应用程序时,我已成功连接到带有 Chrome 的 ClearScript 引擎,并且能够单步执行脚本 - 但是我认为在生产环境中运行各种脚本时,这对最终用户没有意义原因:

  • 设置起来可能太棘手了
  • 端口分配可能遇到的困难
  • 可能的防火墙问题

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

  • 以前有人做过类似的事情吗?
  • 是否有我应该查看的相关 .NET 库?
  • 我是否认为这似乎是一项相当大的工作?
  • 还有其他建议吗?

【问题讨论】:

标签: c# .net v8 remote-debugging clearscript


【解决方案1】:

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

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

除了 websocket 上的请求-响应(命令)类型的交互,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/,它显示了一个目标进程正在被另一个进程调试。

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2013-07-05
    • 2012-02-15
    相关资源
    最近更新 更多