Code::Blocks中Cygwin GDB无法正常工作(错误2:系统找不到指定文件)
我完全懂你这种“为了适配GMP库切换到Cygwin工具链,结果调试直接掉坑”的烦躁——毕竟MinGW的unsigned long是32位,完全满足不了GMP的需求,而新版Cygwin GDB又和Code::Blocks的路径传递逻辑闹起了别扭。从你贴的调试日志里一眼就能揪出问题:
Error creating process /cygdrive/z/_progs/_progsData/cb/myprog/Z:/_progs/_progsData/cb/myprog/bin/Debug/myprog.exe, (error 2: The system cannot find the file specified.)
这个路径把Cygwin的/cygdrive/z/格式和Windows的Z:/格式硬拼在了一起,GDB当然找不到文件!核心问题就是Code::Blocks传递的是Windows风格路径,而新版Cygwin GDB对路径格式的兼容性要求更严格了。
不用编译Code::Blocks源码,几个简单的配置调整就能搞定,试试下面的方案:
方法1:调整Code::Blocks的路径转换规则(最推荐)
这是最直接的解决方式,让Code::Blocks自动把Windows路径转换成Cygwin兼容的格式:
- 打开Code::Blocks,点击顶部菜单栏的 Settings → Debugger
- 在左侧列表里找到你正在用的GDB配置(默认是
GDB/CDB debugger:Default),点击展开后选择 General settings - 在右侧的Path conversion下拉菜单中,选择 Convert to Cygwin paths
- 切换到GDB Settings标签页,确认Command字段指向的是Cygwin的gdb.exe,比如
Z:\_progs\cygwin\bin\gdb.exe - 保存配置,关闭并重新打开Code::Blocks,再尝试调试
方法2:手动指定Cygwin风格的项目路径
如果方法1没生效,可以直接给项目设置Cygwin原生路径:
- 右键你的项目,选择 Properties → Build targets
- 选中你正在用的调试目标(比如Debug),在Output filename里把Windows路径改成Cygwin格式,比如
/cygdrive/z/_progs/_progsData/cb/myprog/bin/Debug/myprog.exe - 再切换到Project settings标签页,把Working directory也改成Cygwin格式:
/cygdrive/z/_progs/_progsData/cb/myprog/. - 保存设置后重新编译调试
方法3:给GDB添加启动参数强制路径转换
如果前两种方法都不行,可以给GDB加个启动参数,让它自动兼容Windows路径:
- 回到Debugger设置的GDB Settings标签页
- 在Additional command-line options里添加:
-iex "set target-file-system windows"
这个参数会让GDB自动把传递过来的Windows路径转换成Cygwin能识别的格式
调试成功的标志是:重新启动调试后,看调试输出里的Changing directory to:变成了/cygdrive/z/_progs/_progsData/cb/myprog/.(纯Cygwin格式),同时GDB尝试启动的可执行文件路径也没有混合Windows和Cygwin路径的情况,这样就不会再出现“找不到文件”的错误了。
另外提一句,你怀念的conio.h其实可以用Cygwin的ncurses-devel包替代——安装这个包后,用ncurses的函数就能实现conio的功能,不用纠结失去MinGW的conio啦~
内容来源于stack exchange

