windows平台gdb调试c代码,单步跳出(set out、finish)有返回值的函数时,出错!会直接退出gdb调试。

问题: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编译的代码一样工作和表现。

解决过程

  1. int c=max(a,b)的定义和赋值分开试试,不行
  2. 直接max(a,b),不行,应该和函数赋值无关 换个函数试试,写了一个最简单的void(void),可以了,可能是内存创建的原因,
  3. 用终端输入gdb命令调试,还是不能用,说明不是launch等函数写错了 重装vscode,不能用
  4. 退出vscode,直接在windows的cmd页面打字调试,不能用,说明一定是gdb的原因
  5. gdb重装win32,不能用
  6. gdb装的是最新版吧
  7. 真正的最新版在github里面,官网没放出来
有用的帖子
https://zhuanlan.zhihu.com/p/681646006

↑帖子总结:

  1. https://www.mingw-w64.org/
  2. 侧边栏Downloads
  3. 下滑至蓝色和紫色图标之间的MingW-W64-builds
  4. 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上面的也没有新很多,因此远离了正确道路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值