Debugging VS代码调试:是否可以提供进程id';pgrep-x"$myprog"';用于附加到进程id时在launch.json(变量“processId”)中使用?

Debugging VS代码调试:是否可以提供进程id';pgrep-x"$myprog"';用于附加到进程id时在launch.json(变量“processId”)中使用?,debugging,visual-studio-code,compilation,Debugging,Visual Studio Code,Compilation,我注意到node.js有一个调试器“自动附加”功能,如果可能的话,我想使用它。但是,我不认为我可以在重新编译程序后使用“自动附加”自动启动调试器。我使用C/C++/Fortran和makefiles(以及类似的文件)编译我的程序,所以在运行“make”之后,我得到了一个普通的(linux)可执行文件。然后我执行那个二进制文件,并经常想在这之后马上调试它。我将完整的二进制路径设置为环境变量“$myprog=/home/user/my dev/bin/myApp” 因此,我要做的是使用“附加到进程”

我注意到node.js有一个调试器“自动附加”功能,如果可能的话,我想使用它。但是,我不认为我可以在重新编译程序后使用“自动附加”自动启动调试器。我使用C/C++/Fortran和makefiles(以及类似的文件)编译我的程序,所以在运行“make”之后,我得到了一个普通的(linux)可执行文件。然后我执行那个二进制文件,并经常想在这之后马上调试它。我将完整的二进制路径设置为环境变量“$myprog=/home/user/my dev/bin/myApp”

因此,我要做的是使用“附加到进程”运行调试,每次我都要在下拉列表中找到合适的进程,但我每天、每小时都要这么做太多次,这变得单调乏味,我想要更智能、更“自动”的东西:

我想修改我的launch.json,而不是“auto attach”(据我所知,仅适用于node.js),这样它就可以自动提取进程id,例如使用shell命令:“pgrep-x”$myprog”,还可以选择将其绑定到键盘快捷键。。。我猜需要修改行“processId”:“${command:pickProcess}”,请参见下面的配置示例:

 {
            "name": "(gdb) Attach (any)",
            "type": "cppdbg",
            "request": "attach",
            "program": "/home/user/my-dev/bin/myApp",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb"
        },

是否可以修改launch.json文件,以便VS代码理解变量“processId”应该由来自“pgrep-x”$myprog”的shell输出替换(显然,在每次编译和执行要调试的程序后,此PID都会发生变化)?如果是这样,我想也可以将它绑定到键盘快捷键。。。有人知道如何做到这一点吗?

是的,使用。它提供了一个vscode命令,可以返回shell命令的结果

我工作区的相关部分如下所示

"launch": {
    "configurations": [
        {
            ...
            "processId": "${input:FindVivadoPID}",
            ...
        }
    ],
    "inputs": [
        {
          "id": "FindVivadoPID",
          "type": "command",
          "command": "shellCommand.execute",
          "args": {
            "command": "pgrep 'ecold.*lnx64.g/vivado' -f",
            "description": "Select your Vivado PID",
            "useFirstResult": true,
          }
        }
    ]
}
每当我运行
启动调试
,它都会自动找到相关进程并附加


堆栈溢出问题更一般地讨论扩展。

很抱歉,回答延迟。我无法从VS代码中下载/查看此扩展。将检查并很快回来-希望与“接受答案为解决”,非常感谢,这看起来真的很有希望,正是我所寻找的!这是一个极好的回答,非常感谢!对于需要扩展但无法从VS代码中看到它的其他人,我建议使用上面的链接手动下载扩展并“从VSIX安装…”-所有这些现在似乎都正常工作,非常好,谢谢!