问题:gdb单步跳出有返回值的函数会导致gdb闪退
解决方法:下载最新的mingw
https://github.com/niXman/mingw-builds-binaries/releases
msvcrt和ucrt的区别:MSVCRT(Microsoft Visual C++ Runtime)和UCRT(Universal C Runtime)是Microsoft Windows上的两种C标准库变体。MSVCRT在所有Microsoft Windows版本中都默认可用,但由于向后兼容性问题,它已经过时,不兼容C99并且缺少一些功能。而UCRT是一个较新的版本,也是Microsoft Visual Studio默认使用的版本。它应该像使用MSVC编译的代码一样工作和表现。
解决过程
- int c=max(a,b)的定义和赋值分开试试,不行
- 直接max(a,b),不行,应该和函数赋值无关 换个函数试试,写了一个最简单的void(void),可以了,可能是内存创建的原因,
- 用终端输入gdb命令调试,还是不能用,说明不是launch等函数写错了 重装vscode,不能用
- 退出vscode,直接在windows的cmd页面打字调试,不能用,说明一定是gdb的原因
- gdb重装win32,不能用
- gdb装的是最新版吧
- 真正的最新版在github里面,官网没放出来
有用的帖子
https://zhuanlan.zhihu.com/p/681646006
↑帖子总结:
- https://www.mingw-w64.org/
- 侧边栏Downloads
- 下滑至蓝色和紫色图标之间的MingW-W64-builds
- https://blog.csdn.net/zhangjiuding/article/details/129556458
msvcrt和ucrt的区别:MSVCRT(Microsoft Visual C++ Runtime)和UCRT(Universal C
Runtime)是Microsoft Windows上的两种C标准库变体。MSVCRT在所有Microsoft
Windows版本中都默认可用,但由于向后兼容性问题,它已经过时,不兼容C99并且缺少一些功能。而UCRT是一个较新的版本,也是Microsoft
Visual Studio默认使用的版本。它应该像使用MSVC编译的代码一样工作和表现。
今日总结
搞到两三点,终于解决了。网上找了很久,大家好像都没有出现过这个问题。(也可能出现了解决了。)发出来希望能帮到大家,也希望下次遇到可以参考。另外,提醒自己不要抱有侥幸心理,因为搞到那么久就是因为我觉得大家都用官网8.1这个版本都没有问题,肯定没问题,github上面的也没有新很多,因此远离了正确道路。