通过 .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 调试器交互。
- 有没有人以前做过类似的事情?
- 是否有任何我应该查看的相关 .NET 库?
- 我的想法是否正确,这似乎是一项相当大的工作?
- 还有其他建议吗?
这是一个基于 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 协议是今天的通用语言。
我正在维护一个企业 C# 应用程序,它通过用户定义的 JavaScript 函数提供最终用户可扩展性(公开了 select 几个 C# types/proxies)(想想金融算法).
我们使用 ClearScript 评估这些函数(之前我们使用另一个名为 Noesis 的库,但我们已经放弃了)。
我想为 最终用户 提供一种方法来执行非常基本的脚本调试(通过 Web 界面)。至少 - 检查变量和步骤 over/into 函数。
当应用程序在本地 运行 时,我已经通过 Chrome 成功连接到 ClearScript 引擎,并且能够单步执行脚本 - 但是我认为这不会由于各种原因 运行 在生产中对最终用户有意义:
- 他们设置起来可能太棘手
- 端口分配可能存在困难
- 可能是防火墙问题
我真正想要的是 V8 调试器的 SignalR 接口——网络应用程序将与 SignalR 交互,而 SignalR 将与 V8 调试器交互。
- 有没有人以前做过类似的事情?
- 是否有任何我应该查看的相关 .NET 库?
- 我的想法是否正确,这似乎是一项相当大的工作?
- 还有其他建议吗?
这是一个基于 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 协议是今天的通用语言。