今天在调试mintty时,命令行参数始终多了几个参数2>CON 1>CON <CON。由于mintty是运行在MSYS环境的而不是运行在MinGW环境的,所以编译、调试都需要使用MSYS环境的编译器和调试器。
VSCode中添加MinGW64终端可以在settings.json中的terminal.integrated.profiles.windows中添加
"MinGW64": {
"path": "G:\\msys64\\usr\\bin\\bash.exe",
"args": ["--login", "-i"],
"env": {
"MSYSTEM": "MinGW64",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit"
}
}
下面是terminal.integrated.profiles.windows的完整配置
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": ["/K chcp 65001 >nul"],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
},
"MinGW64": {
"path": "G:\\msys64\\usr\\bin\\bash.exe",
"args": ["--login", "-i"],
"env": {
"MSYSTEM": "MinGW64",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit"
}
},
"MSYS": {
"path": "G:\\msys64\\usr\\bin\\bash.exe",
"args": ["--login", "-i"],
"env": {
"MSYSTEM": "MSYS",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit"
}
},
},
然后使用make DEBUG=1编译调试版本。

使用默认配置launch.json,修改program和miDebuggerPath调试:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/msys64/mintty.exe",
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "G:/msys64/usr/bin/gdb.exe",
}
]
}
发现命令行参数多了3个参数:2>CON, 1>CON, <CON

但是VSCode下使用MinGW64的gdb调试是正常的(mintty依赖MSYS,不能使用MinGW64中的gdb调试,笔者是使用的一个不依赖MSYS的简单demo测试的),只要使用/usr/bin/gdb.exe就会有这个问题。
原来是launch.json中externalConsole参数的问题,将之改为true,即使用外部终端就正常了。
在调试mintty时遇到命令行参数错误,问题源于MSYS环境而非MinGW。通过调整VSCode的settings.json和launch.json配置,特别是设置externalConsole:true,解决了使用gdb调试时额外参数的问题。使用MinGW64的gdb在不依赖MSYS的情况下正常。

644

被折叠的 条评论
为什么被折叠?



