【问题标题】:Can I profile NodeJS Applications using Visual Studio Code?我可以使用 Visual Studio Code 分析 NodeJS 应用程序吗?
【发布时间】:2019-07-14 15:07:33
【问题描述】:

我可以使用 Chrome 协议成功地将 VS Code 调试器连接到我的远程 NodeJS 目标。我相信相同的协议支持分析和性能测量,因为它很容易从 Chrome 开发工具中完成,但我不确定这是否可以直接从 VS Code 中完成。

是否支持此功能?我该如何使用它?

【问题讨论】:

  • VSCode 的目标是成为一个文本编辑器,而不是一个 IDE。但是,您可以开发一个扩展来做到这一点(可能已经有一些)

标签: javascript node.js visual-studio performance profiling


【解决方案1】:

Visual Studio Code 1.45(2020 年 4 月)应该会有所帮助,因为它集成了 Javascript debugging capabilities,包括分析:

新的 JavaScript 调试器

本月,我们在新的 JavaScript 调试器上继续取得进展。
默认安装在 Insiders 上,可以在 VS Code Stable 中安装from the Marketplace

您可以通过启用 debug.javascript.usePreview 设置开始将其与现有启动配置一起使用。

以下是本月新增的一些功能:

分析支持

您可以通过单击调用堆栈视图中新的“配置文件”按钮或使用 Debug: Take Performance Profile 命令从 Node.js 或浏览器应用程序中捕获 CPU 配置文件。

完成后,您可以选择配置文件将运行多长时间:直到您停止它、运行一段时间或直到您遇到另一个断点。

配置文件结束后,它会保存在您的工作区文件夹中并在 VS Code 中可视化。
当您打开配置文件时,代码镜头会添加到您的文件中,其中包含功能级别和某些“热”行的性能信息。
与在许多其他工具中捕获的配置文件不同,记录的配置文件是 sourcemap 感知的。


cheesus 提到 in the comments 在分析器输出中的行号有问题。
因此microsoft/vscode-js-debug issue 559:

原来这是因为该位置位于仅存在于已编译代码中的函数内。
实际上,我们确实尝试将其源映射回原始文件,但该位置没有可使用的映射。

如果您将目标更改为es6 或更高版本——除非你的目标是 Internet Explorer 或 Node 版本 您的代码也会运行得更快。这是最新的映射

此调试器仅支持 Node 8 及更高版本。
由于这个错误仅在针对旧的 JavaScript 版本时才存在,当对为比调试器本身支持的版本更旧的 Node 版本编译的代码使用就地转译时,以及修复此问题所涉及的复杂性,我将关闭此问题超出范围。

【讨论】:

  • 本可以发表评论,我会更新答案。在看到此更改之前,OP 否决并删除了已接受的答案(您注意到这是 2020 年 4 月)
  • @adamrights 很抱歉投了反对票,这确实没有必要。
  • 这很好,感谢您的提示。但是,分析器输出中的行号是错误的。由于我有很多匿名方法,它们中的大多数都没有名称,因此分析器输出对我来说几乎没有用。你得到准确的行号吗?
  • @cheesus 我确实没有。也许该特定错误已经存在问题?
  • @cheesus 谢谢。很好的反馈。我已将您的评论和问题包含在答案中以提高知名度。
【解决方案2】:

我知道 Chrome 的开发工具中没有插件/支持可用于启动分析或堆转储等。但是,VS Code 调试器可以与开发工具调试器一起工作。

从 VS Code 开始,按照您的意愿开始调试。然后从 Chrome/Chromium 浏览器的任何选项卡中打开开发工具,并查找指示 node.js 调试进程正在运行的绿色图标 (manually done via node --inspect):

.

单击此绿色图标,您将拥有许多用于调试 node.js 进程的浏览器开发工具功能,特别是 memoryprofiler 选项卡。

【讨论】:

  • 这将迫使我使用 chrome/chromium 浏览器,这在某些系统上可能是相当的条件。感谢您的回答!
  • 好吧,您可以运行命令来写入开发工具所连接的内存数据等,然后将其写入文件,并在您可能必须编写的其他工具集中对其进行分析也有点变压器。如此可能,但不像即插即用。
  • 看不到绿色的 NodeJS 图标。左边有两个按钮(“选择一个元素”和“切换设备栏”),但没有绿色按钮。铬87.0.4280.88。我需要延期吗?
【解决方案3】:

是的,有很多方法。

转到package.json 并设置:

  { 
    \\ other information 

    "scripts": {
      "debug": "node --inspect-brk" 
    } 
  }

之后,运行使用命令:npm run debug yourFile.js

或 可以在单行执行node --inspect-brk yourFile.js

之后: 打开 chrome 并转到 chrome://inspect

等待几秒钟,出现一个远程目标并点击inspect

您可以在代码中使用debbuger; 来设置断点。

要了解更多信息,请访问documentation

或者,您可以使用VS code 'Debugger for Chrome' 的插件并关注guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多