在调试程序的时候遇到了一个奇葩的问题,C++ 无法使用 string。最后发现居然是 MinGW64 的问题
起因
在帮助别人调试 vscode-debug-visualizer 这个插件的时候,遇到了无法出结果的问题。经过一系列定位后发现,居然是使用了 string 就无法运行,而编译不会出错。
测试程序
1 | //main.c |
错误现象
使用编译指令如下
1 | g++ -g main.c -o main.exe |
结果正常,运行
1 | .\main.exe |
输出为空
使用 gdb 进行 debug。错误如下
1 | ERROR: Unable to start debugging. Unexpected GDB output from command "-exec-run". During startup program exited with code 0xc0000139. |
解决方案
在 stackoverflow 上找到解决方案。
从 MinGW
的安装目录里面找到 bin
文件夹。将里面的 libstdc++-6.dll
拷贝到工作目录。目录结构如下
1 | + .vscode |
再次进行编译、运行
1 | g++ -g main.c -o main.exe |
输出
1 | {"kind":{"graph":true},"nodes":[{"id":"1"},{"id":"2"}],"edges":[{"from":"1","to":"2"}]} |
gdb 的 debug 结果正常
吐槽
这个问题在 7 年前就被提出了,居然现在还有。MinGW 真是坑啊,用了环境变量也没用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 qxdn的乐园!
评论