首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker node.js TypeScript应用程序中的未绑定断点

Docker node.js TypeScript应用程序中的未绑定断点
EN

Stack Overflow用户
提问于 2021-09-30 00:23:15
回答 1查看 454关注 0票数 1

关于这个主题有很多问题,我已经尝试过许多其他的解决方案,但是解决方案似乎取决于几个方面,比如VS代码的版本和使用的配方。

这是我的VS代码Help>About信息:

代码语言:javascript
复制
Version: 1.60.2 (user setup)
Commit: 7f6ab5485bbc008386c4386d08766667e155244e
Date: 2021-09-22T12:00:31.514Z
Electron: 13.1.8
Chrome: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.17763

操作系统是Windows 10。

安装了Docker插件。

我安装了码头桌面2.3.0.3。

该应用程序是用TypeScript编写的,带有反版本IOC。

我正在使用src/..vscode中的launch.json和tasks.json文件。Docker容器是用/app中的工作空间文件内容构建的。它在本地运行,使用VS代码Docker插件。

launch.json:

代码语言:javascript
复制
{
  "configurations": [
    {
      "name": "Docker Node.js Launch",
      "type": "docker",
      "request": "launch",
      "port": 9229,
      "protocol": "inspector",
      "preLaunchTask": "docker-run: debug",
      "localRoot": "${workspaceFolder}/",
      "platform": "node",
      "remoteRoot": "/app/",
      "sourceMaps": true,
    }
  ]
}

tasks.json:

代码语言:javascript
复制
{
    "version": "2.0.0",
    "tasks": [
    {
      "type": "docker-build",
      "label": "docker-build",
      "platform": "node",
      "dockerBuild": {
        "dockerfile": "${workspaceFolder}/Dockerfile",
        "context": "${workspaceFolder}",
        "pull": true
      }
    },
    {
      "type": "docker-run",
      "label": "docker-run: release",
      "dependsOn": [
        "docker-build"
      ],
      "platform": "node"
    },
    {
      "type": "docker-run",
      "label": "docker-run: debug",
      "dependsOn": [
        "docker-build"
      ],
      "dockerRun": {
        "env": {
          "DEBUG": "*",
          "NODE_ENV": "development",
        },
        "command": "node --inspect-brk=0.0.0.0 dist/index.js",
        "envFiles": [".env"],
      },
      "node": {
        "enableDebugging": true,
        "inspectPort": 9229
      }
    }
  ]
}

tsconfig.json:

代码语言:javascript
复制
{
  "compilerOptions": {
    "target": "es2018",
    "module": "commonjs",
    "noImplicitAny": true,
    "strictNullChecks": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "sourceMap": true,
    "outDir": "./dist/",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "typeRoots": [ "./types", "./node_modules/@types"],
    "resolveJsonModule": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "src/**/*.test.ts", "types", "**/tests/*.ts"]
}

当我启动调试时(选择Docker Node.js启动选项并点击F5),对接器将生成并启动。应用程序在dist/index.js的第一行停止,但是我的所有断点(它们都在类中)显示为未绑定,调试器不会停止在其中任何一个。否则,应用程序将正常运行。

我假设断点是未绑定的,因为VS代码无法将正在运行的代码映射回源代码中的断点。但是,我尝试打开容器中的文件并在其中设置断点,但这也不起作用。

我该怎么做才能让断点正常工作?

EN

回答 1

Stack Overflow用户

发布于 2022-01-12 19:31:39

我今天也有一个类似的问题,终于解决了。我将在这里提供我的调查结果,希望它也能对你们有所帮助。

1.使用trace

通过在trace: true配置中设置launch.json,您将在日志中获得更多的详细信息。在使用Visual代码中的NodeJs调试启动调试器配置时,您将在调试控制台中获得一个日志条目,如

代码语言:javascript
复制
Verbose logs are written to:
/somepath/vscode-debugadapter-xxxxxx.json.gz

您可以在这里使用这个日志文件,并在微软的这个有趣的在线工具中分析它:vscode-pwa-分析仪 (吉特布的整个项目)

里面有很多日志。最好的办法就是试一试,看看里面有没有什么有用的东西。

2.检查源代码映射

对我来说,查看我的一个源文件真的很有帮助。转到您的build / dist或您为构建目录使用的任何名称,并查找.map文件。

如果你打开它,你会看到

代码语言:javascript
复制
{"version":3,"file":"somefile.js","sourceRoot":"","sources":["../../../src/somedir/somefile.ts"] ... }

确保sources路径是正确的。否则,您的tsconfig文件可能会有问题。

3.检查outFiles配置

这似乎是必要的,对我来说,以使它的工作。将所有路径添加为包含已编译Javascript文件的glob模式。

代码语言:javascript
复制
      "outFiles": ["${workspaceFolder}/dist/**.js"],

4. sourceMapPathOverrides

源地图路径也可能有问题。您可以看到在这里添加这个片段是否有帮助:

代码语言:javascript
复制
"sourceMapPathOverrides": {
        "webpack:///./*": "${workspaceRoot}/*",
      },

检查program 配置。

对我来说,添加程序配置属性最终做到了这一点。

如果您不知道是哪一个,在我的例子中,它有助于查看我的Chrome用作条目文件的内容。

当你的应用程序启动时,在你的Chrome浏览器中转到chrome://inspect,看看你在那里看到了什么。

在本例中,条目文件将是server.js,这导致我将该文件的源配置为program,(带有本地路径)如下:

代码语言:javascript
复制
"program": "${workspaceFolder}/src/server.ts"

结论

你的设置可能与我的不同,我仍然不完全理解所有的设置,诚实地说。但也许其中的一件事可以帮助你更接近找到解决方案。告诉我是否有用,祝你好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69384700

复制
相关文章

相似问题

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