【问题标题】:VS Code: Debug TS code when stepping into a library function in the node.js debuggerVS Code:在 node.js 调试器中单步执行库函数时调试 TS 代码
【发布时间】:2021-05-19 17:19:17
【问题描述】:

我在 TS 中编写了一个库和一个程序来测试我的库。我已经为库和程序启用了源映射,并且我正在使用 node.js 调试器。

调试我的程序的 TS 代码是可行的,但是当我进入库函数的调用时,我正在调试发出的 JS 代码而不是我的 TS 源代码。

我将库的 package.json 的 'files' 字段设置为 [ "lib" ],其中 lib 是包含 JS 文件和源映射的目录,但这并没有改变任何内容。

我还有另一种方式告诉 VS Code 它应该使用我的库的源映射吗?

【问题讨论】:

    标签: node.js typescript visual-studio-code vscode-debugger source-maps


    【解决方案1】:

    我终于找到了解决办法。问题当然是 VS Code 调试适配器找不到 lib 的源文件。解决该问题的关键是 lib 项目的 tsconfig.json 中的 "sourceRoot" 选项。

    考虑目录 myLib 中的一个 lib 项目和目录 myProg 中的另一个项目,该项目从 myLib 导入函数。 lib 的源文件位于 myLib/src 中,转译后的 js 文件以及源映射位于 myLib/dist 中。 myLibmyProg 位于同一个父目录中。

    现在,当我调试 myProg 时,我希望能够单步执行从 myLib 导入的函数的调用并调试其 TS 源。

    关于存储在 lib 的源映射中的源文件的路径,重要的是要知道 相对路径是相对于源映射解析的

    让我们看看其中一个 lib 的源映射中的“sources”数组:

    "sources":["../src/main.ts"]
    

    由于我们正在运行 myProg,因此该路径获得 myProg/src/main.ts,但这不是 lib 的 main.ts 的路径。

    现在,我们将 "sourceRoot": "../../myLib/src/" 添加到 lib 的 tsconfig.json。我们看到源图的相关部分已经变成了

    "sourceRoot":"../../myLib/src/","sources":["main.ts"]
    

    由于此路径是相对于 myProg/dist 解析的,因此它得到 myLib/src/main.ts

    现在,我们只需要告诉 VS Code 也在 myLib/dist 中查找源映射,这会导致 "outFiles" 的值如下>myProg 的 launch.json:

    "outFiles": [
        "${workspaceFolder}/dist/*.js",
        "${workspaceFolder}/../myLib/dist/*.js"
    ]
    

    就是这样。您甚至可以在 myLib 的 .ts 文件中设置断点。他们会被击中,但我观察到他们被击中的顺序错误。 在这种情况下,请在第一次调用从 myLib 的导入之前在 myProg 中的某处设置断点。 我没有进行广泛的测试,但据我观察,这似乎解决了这个问题。

    如果你有和我一样的经历,也就是你按F5,程序直接运行,没有碰到任何断点,就反复按F5,直到它工作。 我使用@builtin @id:ms-vscode.js-debug 以及@id:ms-vscode.js-debug-nightly 进行了测试,每个都使用"type": "node""type": "pwa-node",但这并没有改变任何东西。 如果您在启动前打开入口点文件并在其中有一个断点,似乎需要较少的启动才能工作,但我也没有对此进行广泛测试,所以它可能只是偶然发生的。

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 2016-03-18
      • 2014-06-07
      • 2021-09-27
      • 2017-06-24
      • 2020-12-30
      • 1970-01-01
      • 2018-02-05
      • 2020-09-11
      相关资源
      最近更新 更多