今天在调试mintty
时,命令行参数始终多了几个参数2>CON 1>CON 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
,
但是VSCode下使用MinGW64
的gdb
调试是正常的(mintty
依赖MSYS
,不能使用MinGW64
中的gdb调试,笔者是使用的一个不依赖MSYS
的简单demo测试的),只要使用/usr/bin/gdb.exe
就会有这个问题。
原来是launch.json
中externalConsole
参数的问题,将之改为true
,即使用外部终端就正常了。