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

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

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

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

重现步骤:

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

任务定义

  1. {
  2. "label": "Deployment-tools-start-simulators",
  3. "isBackground": false,
  4. "type": "shell",
  5. "command": "${workspaceFolder}/rig_common/deployment_tools/build/sim/default_rig/start.sh",
  6. "options": {
  7. "cwd": "${workspaceFolder}/rig_common/deployment_tools/build/sim/default_rig",
  8. "env": {
  9. "DISPLAY": "${env:DISPLAY}",
  10. "USE_GUI": "${input:useGui}",
  11. "USE_HTML": "0",
  12. "USE_VNC": "0",
  13. }
  14. },
  15. "problemMatcher": [],

启动定义

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

  1. {
  2. "name": "(gdb) Start simulators & Attach Process to AcdsIoSim",
  3. "type": "cppdbg",
  4. "request": "attach",
  5. "program": "${workspaceFolder}/build/sim/default/AcdsIoSim.bin",
  6. "processId": "${command:pickProcess}",
  7. "MIMode": "gdb",
  8. "setupCommands": [
  9. {
  10. "description": "Enable pretty-printing for gdb",
  11. "text": "-enable-pretty-printing",
  12. "ignoreFailures": true
  13. },
  14. {
  15. "description": "Set Disassembly Flavor to Intel",
  16. "text": "-gdb-set disassembly-flavor intel",
  17. "ignoreFailures": true
  18. },
  19. ],
  20. "preLaunchTask": "Deployment-tools-start-simulators",
  21. "postDebugTask": "Deployment-tools-stop-simulators",
  22. },

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

  1. {
  2. "label": "pip list",
  3. "type": "shell",
  4. "command": "pip list",
  5. "problemMatcher": [{
  6. "pattern": [{
  7. "regexp": ".",
  8. "file": 1,"line": 1,
  9. "column": 1,"message": 1
  10. }],
  11. /* "background": {
  12. "activeOnStart": true,
  13. "beginsPattern": { "regexp": "." },
  14. "endsPattern": { "regexp": "." }
  15. },*/
  16. }]
  17. },

结果相同。
我看到有不同的问题报告了这个问题:
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 :

  1. {
  2. "configurations": [
  3. {
  4. "type": "lldb",
  5. "request": "attach",
  6. "name": "Attach",
  7. "pid": "${command:pickProcess}",
  8. "preLaunchTask": "Print Hello World" // This task is not executed before the process picker appears.
  9. }
  10. ]
  11. }

tasks.json :

  1. {
  2. "version": "2.0.0",
  3. "tasks": [
  4. {
  5. "label": "Print Hello World",
  6. "type": "shell",
  7. "command": "echo",
  8. "args": ["Hello World"],
  9. "problemMatcher": []
  10. }
  11. ]
  12. }
展开查看全部
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 :

  1. {
  2. "version": "0.2.0",
  3. "configurations": [
  4. {
  5. "name": "LLDB Attach to container",
  6. "type": "lldb",
  7. "request": "attach",
  8. "pid": "1",
  9. // Tells the docker container to start listening for incoming connections
  10. "preLaunchTask": "start_lldb_server",
  11. // Run LLDB commands to connect to container and attach to ENTRYPOINT process
  12. "processCreateCommands": [
  13. "platform select remote-linux",
  14. "platform connect connect://localhost:${input:lldb_listen_port}",
  15. "process attach --pid 1"
  16. ],
  17. "stopOnEntry": false,
  18. "sourceLanguages": [
  19. "rust"
  20. ],
  21. }
  22. ],
  23. "inputs": [
  24. {
  25. "id": "lldb_listen_port",
  26. "type": "promptString",
  27. "description": "Enter Port"
  28. }
  29. ]
  30. }

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

展开查看全部
pftdvrlh

pftdvrlh9#

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

相关问题