未绑定断点 - VS Code | Chrome | Angular

Unbound breakpoint - VS Code | Chrome | Angular

我有一个 Angular 应用程序,我正尝试在 VS Code 中调试。

当我编译 运行 应用程序 (ng serve) 时,断点被绑定:

但是,当我指定不同的配置时,例如-c qa-c uat 它们是未绑定的:

  1. 为什么当我指定不同的断点时,断点未绑定 配置?
  2. 如何为针对特定环境的调试会话绑定断点?

相关信息

angular.json 示例环境配置:
"uat": {
  "fileReplacements": [
    {
      "replace": "src/environments/environment.ts",
      "with": "src/environments/environment.uat.ts"
    }
  ],
  "optimization": true,
  "outputHashing": "all",
  "sourceMap": false,
  "extractCss": true,
  "namedChunks": false,
  "extractLicenses": false,
  "vendorChunk": false,
  "buildOptimizer": true,
  "budgets": [
    {
      "type": "initial",
      "maximumWarning": "2mb",
      "maximumError": "5mb"
    },
    {
      "type": "anyComponentStyle",
      "maximumWarning": "6kb",
      "maximumError": "10kb"
    }
  ]
},
软件版本控制:

解决这个问题很简单,我没有在 angular.json 中将 sourceMap 属性 设置为 true对于那个特定的环境,我有 "sourceMap": false,

有关详细信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/SourceMap

感谢 Connor - https://github.com/microsoft/vscode-js-debug/issues/872

对我来说,vscode 设置:

调试 > Javascript:使用预览,这会导致调试器无法命中断点。

取消选中 调试 > Javascript:在 vscode 设置中使用预览

(或在 settings/workspace json 文件中)添加:

"debug.javascript.usePreview": false

对我来说,我通过将此选项添加到 webpack.config.js:

解决了这个问题
devtoolModuleFilenameTemplate: '[absolute-resource-path]'

以上都试过了,重启还是不行。没有错误,没有挂起,这就像一个断点已经被击中,现在正在等待你,但你只是看不到任何断点被击中以及在哪里。但是独立浏览器 Chrome 和 Edge 都 运行 没问题。

注意,这不仅仅是 Angular,它也发生在 Node 后端!

所以除了以上设置外,运行 -> Disable All Breakpoints,然后Enable All Breakpoints解决了。

2021-09-17,今天无论如何它又停止工作了。最后添加一个新的断点把它取回来。此行为可能与 debugger extremely lagging 有关。绝对是 VSC 的一个错误。

这不会直接回答问题,但提供了一个了解问题所在的一般提示: 启动或附加调试器时设置 trace : true 。 停止调试器。 查看日志。该路径应该在调试控制台中。

去这个网站分析你的日志。 https://microsoft.github.io/vscode-pwa-analyzer/index.html

点击标签过滤器中的 sourcemap.parsing 和 runtime.sourcemap。 你会看到这样的事情:

至少你现在有一个反馈循环来了解你的 launch.json 如何影响 sourcemaps。

启动文件(红色圆圈)也有很多有用的信息

在我的例子中,我需要更改 webroot

来自

"webRoot": "${workspaceFolder}"

"webRoot": "${workspaceFolder}\projectName"

项目名称是您在开头给出的名称ng new projectName

然后断点绑定。

过去,我在上述几个答案中取得了不同程度的成功。本周问题又回来了。出于某种原因,这次我能够通过在 angular.json 文件中提供 defaultConfiguration 来解决它。

      "defaultConfiguration": "dev"

这对我来说也没有任何意义,但如果我删除它,我所有的断点都会在运行时变为“未绑定”。

我只是想把它放在这里以防它对其他人有帮助。

干杯, 旦

PS - 更新以添加更好的修复。我在我的“开发”配置中有正确的设置,但你也可以把

"sourceMap": true

在 angular.json 的架构师级别将其设为默认。这个设置一直是我的问题。默认设置也有助于其他设置,如优化:false、预算等。因此,我删除了 defaultConfiguration 行,因为我的开发设置现在是默认设置。

我最近花了很多时间准备 angular.json 设置。 ;-)

在我的案例中,我将其追溯到我的 Node 版本 (17) 和我 运行 ng version 时显示的 Angular 版本 (13) 之间的不兼容。我将 Node 降级到 v16,现在一切正常。还有一个

我在我的 vueJS 项目中遇到了同样的问题。在对文件等进行任何更改之前尝试一些为我解决的问题:

在 ClientApp/App 文件夹中: 1.Delete node_modules 文件夹 2.Delete package-lock.json 文件 3.Open ClientApp/App 文件夹的命令提示符 4.Use 命令“npm i”

这最后一步将重新安装所有 node-modules。 我遇到的问题一定是相互矛盾的 node-module.

对我来说,这里的建议并没有解决问题,但是重启(退出并再次打开)VS Code 解决了!