首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >远程调试V8引擎(不是Node.js,而是ClearScript)

远程调试V8引擎(不是Node.js,而是ClearScript)
EN

Stack Overflow用户
提问于 2017-02-23 19:15:05
回答 3查看 1.9K关注 0票数 4

我使用Microsoft.ClearScript.V8将V8引擎的一个简单实例嵌入到C#控制台应用程序中。我想远程调试谷歌Chrome中正在发生的事情,但我失败了。

搜索interwebz,我能找到的唯一解决方案就是从那里安装Eclipse并进行调试。然而,这是不可取的。我想了解在后台发生了什么,并能够再现这些功能。

我已经知道远程调试器是通过WebSockets进行的,但我不知道实现细节。你们能给我指明正确的方向吗?

我的代码:

代码语言:javascript
运行
复制
int debugPort = 8888;
var ctx = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging, debugPort);
ctx.AllowReflection = true;

/* This is not required but allows me to console log things. */
ctx.AddHostType("Console", typeof(Console));

当我试图使用V8检查器(https://chrome.google.com/webstore/detail/nodejs-v8-inspector/lfnddfpljnhbneopljflpombpnkfhggl)连接时,会得到以下错误:

无法在JSON中在0位置启动调试器意外令牌T

这是完全合理的,因为它需要一个JSON格式的字符串,因为Node是这样实现的。

当我在浏览器中打开http://127.0.0.1:8888/时,会收到以下输出:

代码语言:javascript
运行
复制
Type: connect
V8-Version: 5.3.332.45
Protocol-Version: 1
Embedding-Host: V8Runtime
Content-Length: 0

如何从Google远程调试我的非节点应用程序?

EN

Stack Overflow用户

发布于 2018-06-05 08:47:23

这是答案的一部分(而不是答案)。

到目前为止,我已经花了两天的时间尝试同样的方法,并且发现ClearScript没有使用节点来调试javascript代码=/=。

已设法运行node.exe并附加调试器:节点进程列表输出是(http://127.0.0.1:9229/json/list):

代码语言:javascript
运行
复制
[ {
  "description": "node.js instance",
  "faviconUrl": "https://nodejs.org/static/favicon.ico",
  "id": "574da142-2ee2-44da-a912-03f96868339c",
  "title": "Administrator: IA-32 Visual Studio 2008 mode - node  --inspect[6416]",
  "type": "node",
  "url": "file://"
} ]

但是它看起来一点也不像ClearScript.V8设备(http://127.0.0.1:9222/):

代码语言:javascript
运行
复制
Type: connect
V8-Version: 5.5.372.40
Protocol-Version: 1
Embedding-Host: V8Runtime
Content-Length: 0

就像你的一样。

进一步阅读V8实现了它自己的调试协议,我没有找到任何确定的文档。所有的互联网都有零碎,但没有什么是完整的。我在Chrome工具中成功地识别了远程设备,但除此之外,我无法选择检查设备,也不确定原因(可能是因为我们都在使用较早版本的ClearScript 5.4.x)。CDT >远程设备: Remote #127.0.0.1 / Target (就这样,没有按钮,没有链接,什么也不能用它做)。

最后一个希望是在某种程度上构建我自己的检查器,以查看至少js堆栈跟踪(如果没有的话)(这本来是我的目标)。

--编辑:结束并完成回答(为执行部分、我和其他人):

找到正确工作的"Microsoft代码“。只需对配置示例稍加修改,就可以阅读它们的帮助,但却使其工作起来。加载脚本源,断点,控制台,一切只是工作(如广告)。

如何:

  • 下载Microsoft (我已经下载了压缩包-不需要安装) https://code.visualstudio.com/
  • 运行Microsoft,创建工作区(launch.json文件将在那里创建)
  • 编辑launch.json (通过切换到View->Debug并按下配置按钮-它会自动打开launch.json文件)。
  • 从下面提供的代码中添加最后3种配置。调整是“协议”:“旧式”即5.4.x版本使用NodeJS < 8.x版本,而调试协议则有很大不同。CS V8 5.5.x使用“协议”:“检查器”和“协议”:“自动”两种方式(猜测和调试协议的未来扩展)。

launch.json源代码:

代码语言:javascript
运行
复制
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {            
            "type": "node",
            "request": "launch",
            "name": "Launch Program (NodeJS)",
            "program": "${workspaceRoot}/bin/Debug/",
            "cwd": "${workspaceRoot}",
        },
        {
            "type": "node",
            "request": "attach",
            "name": "Attach by Process ID",
            "processId" :"${command:PickProcess}",
            "cwd": "${workspaceRoot}",            
        },
        // works with 5.5.x V8 Runtime
        {            
            "type": "node",
            "request": "attach",
            "name": "Attach to CSV8:9222 (Inspector)",
            "protocol": "inspector",
            "address": "127.0.0.1",
            "port": 9222,
        },
        // works with 5.4.x V8 Runtime
        {            
            "type": "node",
            "request": "attach",
            "name": "Attach to CSV8:9222 (Legacy)",
            "protocol": "legacy",
            "address": "127.0.0.1",
            "port": 9222,
        },
        // works with 5.4.x and 5.5.x V8 Runtime
        {            
            "type": "node",
            "request": "attach",
            "name": "Attach to CSV8:9222 (Auto)",
            "protocol": "auto",
            "address": "127.0.0.1",
            "port": 9222,
        }, 
    ]
}
  • 运行您的ClearScript应用程序(确保已启用调试,并且调试端口匹配)。
  • 在“”工具栏中,选择“附加到CSV8 8:9222(自动)”并按“运行”。在这一刻,MS代码将加载所有远程JS源代码。您可以选择源,并在那里放置断点。调试器的工作就像广告中所做的那样。

希望这对你也有帮助

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42424260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档