vscode 调试附加 - launch.json pickProcess命令在preLaunchTask之前启动,

sr4lhrrt  于 4个月前  发布在  Vscode
关注(0)|答案(9)|浏览(48)

当所有扩展都被禁用时,是否会出现这个问题?:是/否

  • VS Code 版本:1.72.0
  • OS 版本:Windows_NT x64 10.0.19044

重现步骤:

  1. 使用 command pickProcess 定义一个调试附加类型。
  2. 创建一个任务示例
  3. 将创建的任务示例指定为 preLaunch。
  4. 运行
    我还尝试过在 VS Code Insiders 和 C++ 工具预发布版中测试。
    示例:

任务定义

{
        "label": "Deployment-tools-start-simulators",
        "isBackground": false,
        "type": "shell",
        "command": "${workspaceFolder}/rig_common/deployment_tools/build/sim/default_rig/start.sh",
        "options": {
          "cwd": "${workspaceFolder}/rig_common/deployment_tools/build/sim/default_rig",
          "env": {
            "DISPLAY": "${env:DISPLAY}",
            "USE_GUI": "${input:useGui}",
            "USE_HTML": "0",
            "USE_VNC": "0",
          }
        }, 
        "problemMatcher": [],

启动定义

//启动模拟器,选择并附加到 ioSim,调试结束后停止。

{
            "name": "(gdb) Start simulators & Attach Process to AcdsIoSim",
            "type": "cppdbg",
            "request": "attach",
            "program": "${workspaceFolder}/build/sim/default/AcdsIoSim.bin",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                },
            ],
            "preLaunchTask": "Deployment-tools-start-simulators",
            "postDebugTask": "Deployment-tools-stop-simulators",
        },

我尝试过使用一个简单的任务,如 pip list

{
        "label": "pip list",
        "type": "shell",
        "command": "pip list",
        "problemMatcher": [{
          "pattern": [{
            "regexp": ".",
            "file": 1,"line": 1,
            "column": 1,"message": 1
          }],
         /* "background": {
              "activeOnStart": true,
              "beginsPattern": { "regexp": "." },
              "endsPattern": { "regexp": "." }
          },*/
        }]
      },

结果相同。
我看到有不同的问题报告了这个问题:
debugger attach pickProcess should run after preLaunchTask #9773
Launch preLaunchTask should complete before resolveDebugConfiguration #95162
但是没有一个有效。
能帮我解决一下吗?
谢谢。

ki0zmccv

ki0zmccv1#

不知何故,#95162的修复已经退化了,尽管代码更改已经到位。

xwbd5t1u

xwbd5t1u2#

实际上不是,这只是关于preLaunchTask + resolveDebugConfiguration的顺序,而不是解析变量。一个可能的问题是,在启动preLaunchTask之前解析变量是有意义的,比如向任务传递参数。如果这是一个问题,也许我们甚至可以这样做:在preLaunchTask中解析变量,启动任务,然后解析剩余的变量。

ua4mk5z4

ua4mk5z43#

我在当前版本的VS Code(1.84.2)中遇到了相同的问题。在launch.json中的${command:pickProcess}在我的preLaunchTask有机会启动进程之前就已经执行了。
下面是一个非常简单的“Hello World”示例。我做错了什么吗?
launch.json :

{
  "configurations": [
    {
      "type": "lldb",
      "request": "attach",
      "name": "Attach",
      "pid": "${command:pickProcess}",
      "preLaunchTask": "Print Hello World" // This task is not executed before the process picker appears.
    }
  ]
}

tasks.json :

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Print Hello World",
            "type": "shell",
            "command": "echo",
            "args": ["Hello World"],
            "problemMatcher": []
        }
    ]
}
djp7away

djp7away4#

关于这个问题,有没有更新?我仍然可以在VS Code的最新版本(1.85.1)中重现它。我应该创建一个新的问题吗?

xqnpmsa8

xqnpmsa85#

我遇到了与@FelixLisczyk相同的问题。
我本以为"PreLaunchTask"会在processId / pickProcess提示出现之前发生,因为在preLaunch上有一些必要的设置会创建这个进程。
更多细节:
VSCode 1.85.2
在arm Macbook上运行
使用remote-ssh连接到linux设备
启动类型:go

emeijp43

emeijp436#

我也在C++项目中遇到了这个问题。然而,我注意到,如果我不指定 processId ,让它使用默认值(即 command:pickProcess ),它会正确地先运行 preLaunchTask。如果我将 processId 设置为 command:pickProcess (这是默认值),现在它会在 preLaunchTask 之前错误地运行。

这对我来说是个问题,因为我试图编写一个自定义进程ID选择器,如果这样做,它总是在 preLaunchTask 之前运行。

版本:1.85.2(用户设置)
提交:8b37750
日期:2024-01-18T06:40:10.514Z
Electron:25.9.7
ElectronBuildId:26354273
Chromium:114.0.5735.289
Node.js:18.15.0
V8:11.4.183.29-electron.0
操作系统:Windows_NT x64 10.0.19044

c7rzv4ha

c7rzv4ha7#

实际上不是这样的,这只是关于preLaunchTask + resolveDebugConfiguration的顺序,而不是解析变量。一个可能的问题是,在启动preLaunchTask之前解析变量是有意义的,比如向任务传递参数。如果这是一个问题,也许我们甚至可以这样做:在preLaunchTask中解析变量,启动任务,然后解析剩余的变量。

你好,
我这边也遇到了同样的问题。
如果我有自定义命令,比如动态获取程序,并且有一个preLaunchTask来构建项目,那么我的自定义命令将在preLaunchTask之前执行。
对我来说,@roblourens的建议解决了在不限制它们在preLaunchTask中使用的情况下解析命令的问题。

u91tlkcl

u91tlkcl8#

这绝对是#95162的回归,正如@FelixLisczyk的评论所示。
我的设置:
launch.json :

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "LLDB Attach to container",
            "type": "lldb",
            "request": "attach",
            "pid": "1",
            // Tells the docker container to start listening for incoming connections
            "preLaunchTask": "start_lldb_server",
            // Run LLDB commands to connect to container and attach to ENTRYPOINT process
            "processCreateCommands": [
                "platform select remote-linux",
                "platform connect connect://localhost:${input:lldb_listen_port}",
                "process attach --pid 1"
            ],
            "stopOnEntry": false,
            "sourceLanguages": [
                "rust"
            ],
        }
    ],
    "inputs": [
        {
            "id": "lldb_listen_port",
            "type": "promptString",
            "description": "Enter Port"
        }
    ]
}

在我的案例中,lldb_listen_port的提示显示在"preLaunchTask": "start_lldb_server"执行之前。这阻止了我调试我的应用程序。
@roblourens,你能再看一下这个bug吗?

pftdvrlh

pftdvrlh9#

同时,不确定这是否是一个巧合或有意义的事情,但当我和@FelixLisczyk尝试使用LLDB进行调试时,我们都遇到了这个问题。

相关问题