TL;DR
我正在寻找一种在每次启动调试器时设置和使用随机环境变量的方法。具体来说,我希望能够为GDB服务器和客户端使用随机端口号。我目前的配置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "app",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/app/app.elf",
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"miDebuggerServerAddress": "localhost:3333",
"miDebuggerPath": "/home/me/intelFPGA/20.1/nios2eds/bin/gnu/H-x86_64-pc-linux-gnu/bin/nios2-elf-gdb",
"debugServerPath": "/home/me/intelFPGA/20.1/quartus/bin/nios2-gdb-server",
"debugServerArgs": "--tcpport 3333 --reset-target --tcptimeout 5",
}
]
}
上下文
我通过Visual Studio代码使用Nios-ii嵌入式设计套件,以避免使用Eclipse。通过vscode(包括调试(,一切都运行得很好,然而,nios2 gdb服务器中有一个令人讨厌的错误;当它退出时,它并不总是终止TCP连接。因此,如果您想在此后不久启动一个新的调试会话,它将失败,因为端口仍在使用中(端口最终在几分钟后关闭(。工具的Eclipse端通过始终为每个调试会话使用一个随机端口来避免这种情况。我正试图找到一种方便的方法在vscode中复制它。
您可以使用扩展命令变量v1.42.1
使用命令:extension.commandvariable.number
和extension.commandvariable.remember
在这个例子中,我使用了一个不同于前面10个数字的随机端口号。
根据VSC首先评估的字符串,您可能需要交换2个${input}
变量。
{
"version": "0.2.0",
"configurations": [
{
"name": "app",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/app/app.elf",
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"miDebuggerServerAddress": "localhost:${input:randomPort}",
"miDebuggerPath": "/home/me/intelFPGA/20.1/nios2eds/bin/gnu/H-x86_64-pc-linux-gnu/bin/nios2-elf-gdb",
"debugServerPath": "/home/me/intelFPGA/20.1/quartus/bin/nios2-gdb-server",
"debugServerArgs": "--tcpport ${input:rememberRandomPort} --reset-target --tcptimeout 5",
}
],
"inputs": [
{
"id": "randomPort",
"type": "command",
"command": "extension.commandvariable.number",
"args": {
"name": "randomPort",
"range": [1500, 60000],
"random": true,
"uniqueCount": 10
}
},
{
"id": "rememberRandomPort",
"type": "command",
"command": "extension.commandvariable.remember",
"args": { "key": "number-randomPort" }
}
]
}