Home Articles

VSCode - 如何使用启动配置调试启动自己的调试器的Node程序?

Asked
Viewed 1880 times
0

(注意:我的具体用例可能看起来很复杂,但基本的想法不是!)

我有一个Gulp脚本启动一个Docker容器,它本身包含并启动另一个Gulp脚本,该脚本使用 Nodemon 以调试模式启动最终的Node脚本!在Docker容器中运行的Nodemon Gulp脚本看起来像这样:

nodemon({
    "script": `start.js`,
    "nodeArgs": [`--debug=0.0.0.0:5858`, "-nolazy"],
    "ext": "js",
    "restartable": true
});

我希望能够在Visual Studio Code中按 [F5] ,启动最终脚本并附加VSCode的调试器!

What does work

如果我手动启动第一个Gulp脚本,在终端中启动Docker容器,则执行带有Nodemon的其他嵌入式Gulp脚本并启动最终脚本 . 然后我可以在VSCode中按 [F5] 启动 attach 启动配置,我就可以调试了!端口 5858 由Docker公开,一切运行正常 .

What I want

我希望能够跳过在终端中手动启动脚本 . 我想要一个VSCode启动配置,它可以自行完成所有操作=>在VSCode的集成终端中启动脚本,并将调试器连接到脚本本身启动的调试过程 .

I tried

  • 带有 preLaunchTask 任务的 "request": "attach" 启动配置 . 该任务是启动第一个Gulp脚本 . 这种方法的问题是 preLaunchTask 任务永远不会结束:它启动终端中的第一个脚本(任务有一个:“ "_runner": "terminal" ”),但最后脚本正在侦听并且实际上没有监听请求 . ..这似乎阻止VSCode调试器启动,因为 preLaunchTask 任务永远不会退出 .

  • 启动第一个脚本的 "request": "launch" 启动配置 . 但是在这里,即使看起来它会起作用(出现橙色调试条),调试也不会真正起作用 . 如果我理解正确,这是因为 launch 启动配置自己启动一个Node调试器(在指定的端口上),因此调试器将始终由Docker容器内的Nodemon启动,永远不会被监听 .

换句话说:我只想点击 [F5] ,这样就可以在集成终端中启动脚本,无需调试器,然后VSCode会将调试器连接到生成的 127.0.0.1:5858 调试过程,看看这个过程是如何实际启动的 .

UPDATE :我还在Github上建议尝试使用 compound 启动配置,但它也不起作用:https://github.com/Microsoft/vscode/issues/36685

1 Answer

  • 1

    你第一次尝试 attach 配置 preLaunchTask 是正确的 . 你可能只需要一次调整 . 默认情况下,vscode将等待任务终止,因此您需要通过添加 "isBackground": true 告诉它任务将在后台运行 . 然后你需要告诉它在任务中要注意哪些模式匹配任何东西 . 例如 . :

    "problemMatcher": {
        "pattern": {
            "regexp": "__________"
        },
        "background": {
            "activeOnStart": false,
            "beginsPattern": "Some pattern when the debugging process is about to start",
            "endsPattern": "Ready for attach"
        }
    }
    

    任务运行器正在观察程序输出以匹配 endsPattern - 当某些输出匹配时,它将知道程序已准备好供调试器附加 . 如果您的脚本没有产生任何输出,则应在调用 nodemon 后添加一些console.log .

    通常,problemMatcher用于匹配构建任务输出的问题,正则表达式可以匹配文件名,行和错误消息 . 但是在这里我们只是将它用于"background"模式,所以我们给它一个虚拟正则表达式 . 这是一个描述此变通方法的线程,以及如何通过将"background"模式移出patternMatcher来更轻松:https://github.com/Microsoft/vscode/issues/6209#issuecomment-289411630

    以下是有关观看任务的文档,以获取更多详细信息:https://code.visualstudio.com/docs/editor/tasks#_background-watching-tasks

Related