我注意到node.js有一个调试器“自动附加”特性,如果可能的话,我希望使用这个特性。我不认为我可以在重新编译程序后使用“自动附加”来自动启动调试器。(类似)因此在运行“make”后,我会得到一个正常的(linux)可执行文件。然后,我执行二进制文件,并经常希望立即调试它,我将完整的二进制路径设置为一个环境变量“$myprog=/home/user/my-dev/bin/myApp”。
因此,我所做的是使用“Attach to process”运行调试,每次我都必须在下拉列表中找到合适的进程,但我每天、每小时都要做太多次,这变得 * 乏味 *,希望有更智能、“更自动”的东西:
除了“auto attach”(据我所知,仅适用于node.js),我希望修改launch.json,使其自动提取进程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”应替换为以下shell输出:'pgrep -x“$myprog”'(显然这个PID会改变,每次编译和执行程序后都要调试)?如果是这样的话,我猜也可以把它绑定到一个键盘快捷键上......有人知道怎么实现吗?
2条答案
按热度按时间xiozqbni1#
是的,使用Tasks Shell Input Extension是可能的。它提供了一个可以返回shell命令结果的vscode命令。
工作区的相关部分如下所示。
每当我运行
Start Debugging
时,它都会自动找到相关的进程并进行连接。This Stack Overflow问题更一般地讨论扩展。
nzrxty8p2#
如果您可以使用LLDB,但Shell输入扩展由于某种原因不能正常工作,则您的程序还可以使用调试信息调用Visual Studio代码,以要求它按此处所述进行连接。
rust eclipse :
丙:
或者将以下内容添加到launch.json:
然后将以下内容添加到tasks.json:
但是更改“pgrep --full --newsgodot.*remote-debug”来搜索您的进程。我使用它在同一个Godot可执行文件上同时调试两种语言。带有GDScript调试器和Tasks Shell Input Extension的Compound Launch试图同时启动两个调试器,并且直到配置了LLDB启动之后才启动我想要的PID的可执行文件。后台preLaunchTask修复了这个问题。