关于这个主题有很多问题,我已经尝试过许多其他的解决方案,但是解决方案似乎取决于几个方面,比如VS代码的版本和使用的配方。
这是我的VS代码Help>About信息:
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:
{
"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:
{
"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:
{
"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代码无法将正在运行的代码映射回源代码中的断点。但是,我尝试打开容器中的文件并在其中设置断点,但这也不起作用。
我该怎么做才能让断点正常工作?
发布于 2022-01-12 19:31:39
我今天也有一个类似的问题,终于解决了。我将在这里提供我的调查结果,希望它也能对你们有所帮助。
1.使用trace
通过在trace: true配置中设置launch.json,您将在日志中获得更多的详细信息。在使用Visual代码中的NodeJs调试启动调试器配置时,您将在调试控制台中获得一个日志条目,如
Verbose logs are written to:
/somepath/vscode-debugadapter-xxxxxx.json.gz您可以在这里使用这个日志文件,并在微软的这个有趣的在线工具中分析它:vscode-pwa-分析仪 (吉特布的整个项目)
里面有很多日志。最好的办法就是试一试,看看里面有没有什么有用的东西。
2.检查源代码映射
对我来说,查看我的一个源文件真的很有帮助。转到您的build / dist或您为构建目录使用的任何名称,并查找.map文件。
如果你打开它,你会看到
{"version":3,"file":"somefile.js","sourceRoot":"","sources":["../../../src/somedir/somefile.ts"] ... }确保sources路径是正确的。否则,您的tsconfig文件可能会有问题。
3.检查outFiles配置
这似乎是必要的,对我来说,以使它的工作。将所有路径添加为包含已编译Javascript文件的glob模式。
"outFiles": ["${workspaceFolder}/dist/**.js"],4. sourceMapPathOverrides
源地图路径也可能有问题。您可以看到在这里添加这个片段是否有帮助:
"sourceMapPathOverrides": {
"webpack:///./*": "${workspaceRoot}/*",
},检查program 配置。
对我来说,添加程序配置属性最终做到了这一点。
如果您不知道是哪一个,在我的例子中,它有助于查看我的Chrome用作条目文件的内容。
当你的应用程序启动时,在你的Chrome浏览器中转到chrome://inspect,看看你在那里看到了什么。

在本例中,条目文件将是server.js,这导致我将该文件的源配置为program,(带有本地路径)如下:
"program": "${workspaceFolder}/src/server.ts"结论
你的设置可能与我的不同,我仍然不完全理解所有的设置,诚实地说。但也许其中的一件事可以帮助你更接近找到解决方案。告诉我是否有用,祝你好运。
https://stackoverflow.com/questions/69384700
复制相似问题