Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 远程调试V8引擎(不是Node.js,而是ClearScript)_Javascript_V8_Devtools - Fatal编程技术网

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

Javascript 远程调试V8引擎(不是Node.js,而是ClearScript),javascript,v8,devtools,Javascript,V8,Devtools,我正在使用在C#控制台应用程序中嵌入一个简单的V8引擎实例。我想远程调试Google Chrome开发工具中发生的事情,但失败了 搜索interwebz,我能找到的唯一解决方案是在那里安装Eclipse并进行调试。然而,这是不可取的。我想了解在后台发生了什么,并能够重现功能 我已经知道远程调试器通过WebSocket进行对话,但我不知道实现细节。你们能给我指一下正确的方向吗 我的代码: int debugPort = 8888; var ctx = new V8ScriptEngine(V8Sc

我正在使用在C#控制台应用程序中嵌入一个简单的V8引擎实例。我想远程调试Google Chrome开发工具中发生的事情,但失败了

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

我已经知道远程调试器通过WebSocket进行对话,但我不知道实现细节。你们能给我指一下正确的方向吗

我的代码:

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 inspector()进行连接时,出现以下错误:

无法启动调试器 JSON中位于位置0处的意外标记T

这是完全有意义的,因为当节点以这种方式实现它时,它需要一个JSON格式的字符串

当我在浏览器中打开时,我收到以下输出:

Type: connect
V8-Version: 5.3.332.45
Protocol-Version: 1
Embedding-Host: V8Runtime
Content-Length: 0

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

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

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

已成功运行node.exe并连接调试器: 节点进程列表输出为():

但它看起来不像ClearScript.V8设备():

和你的差不多

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

最后一个希望是在某种程度上构建我自己的检查器,以便在什么都没有的情况下至少看到js堆栈跟踪(这是我最初的目标)

---编辑:总结并完成答案(针对op、me和其他人):

找到了可以正常工作的“Microsoft代码”。它对配置示例进行了一些调整,阅读了他们的帮助,但成功了。 加载脚本源、断点、控制台,一切都正常(如广告所示)

如何:

  • 下载Microsoft代码(我已使用zip软件包-无需安装)

  • 运行Microsoft代码,创建工作区(将在那里创建launch.json文件)

  • 编辑launch.json(通过切换到查看->调试并按下配置按钮,它会自动打开launch.json文件)
  • 从下面提供的代码中添加最后3个配置。调整是“协议”:“遗留”ie 5.4.x版本使用NodeJS<8.x版本,调试协议有很大不同。CS V8 5.5.x使用“protocol”:“inspector”和“protocol”:“auto”涵盖了这两个方面(guess和调试协议的未来扩展)
launch.json源代码:

{
    // 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应用程序(确保已启用调试,并且调试端口匹配)

  • 从Microsoft代码调试工具栏中选择附加到CSV8:9222(自动),然后按运行。此时,MS代码将加载所有远程JS源代码。你们可以选择震源并在那个里放置断点。调试工作就像广告宣传的那样

希望这对你也有帮助

至少你需要。旧版本不支持V8 Inspector协议。最新版本(5.5.2)适用于chrome://inspect 阅读似乎用ClearScript和Visual Studio代码对JavaScript代码进行本地调试是一件复杂的事情,但事实并非如此。以下是操作说明:

  • 设置Visual Studio代码编辑settings.json中的启动配置,如中所述

  • 使用
    V8ScriptEngineFlags.EnableDebugging
    +
    V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart
    选项启动V8发动机

  • 从Visual Studio或直接从编译的可执行文件运行C#代码;C#代码将暂停,等待Visual Studio代码调试进程附加到C#代码

  • 在Visual Studio代码中启动调试(菜单调试|启动调试)

  • 此时,VSCode连接并在执行的第一行JavaScript处停止,然后在所有
    调试器;“
    命令处停止。当前脚本已加载并可调试,所有以前执行的脚本都在VSCode中可见


    另请参见和。

    谢谢,我花了两天时间才弄明白这一点。问题是ClearScript 5.5.x使用的是.NET 4.5,我有.NET 4.0,无法升级。。。说来话长。。。但今天我们已经知道了如何运行旧版本。为其他有类似问题的人编辑了上述答案。无论如何,再次感谢;)
    Type: connect
    V8-Version: 5.5.372.40
    Protocol-Version: 1
    Embedding-Host: V8Runtime
    Content-Length: 0
    
    {
        // 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,
            }, 
        ]
    }