堆溢出bug定位调试修复

最近代码出了bug,堆溢出。 debug下一切正常, release时随机崩溃到某几个地方,

报错是: Critical error detected c0000374

不是完全随机崩溃,崩溃到某几个正常的地方,开始怀疑是不是这几个地方真的有什么bug,

由于使用了qt库,炸到qt函数调用最后崩溃到系统dll中,根本无法调试,最后发现了一个神器

就是 WinDbg自带的工具软件 gflags, 通过这个软件可以修改注册表让程序运行时,系统runtime分配内存时额外再前后多分配两个字节,并且填充0xfd(貌似是这个),当程序内存发生溢出时写到

额外分配的内存时就直接终端。 gflags工具下载。这个再WindowsSDK中包含了,如果没有可以去

微软官网单独下载这个sdk安装时只安装调试工具,安装完成后的路径:

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

打开里面的gflags.exe 切换到如下图选择 Image File, 注意exe只需要

文件名不需要完整路径。 下面Debugger可以不选,我选了之后有报错,

然后用vs正常启动release来调试就可以定位到,另外如果无法定位。可以

把下面的几个Enable xxx checking都勾选试试,不过这样程序运行会变很慢,

调试完记得在注册表中删除这些设置,否则程序一直运行很慢。

注册表路径是:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Image File Execution Options/mytest.exe

有时间研究下Windbg这个,有非常多的调试工具有助于定位bug。

也可参考这几篇博客:

Windbg的gflags.exe -- Attach调试利器_windbg gflag 挂 exe-CSDN博客

【VS】Windbg的gflags.exe调试堆栈溢出,访问越界等问题。_vs vld 越界访问-CSDN博客

相关推荐
Pan Zonghui1 天前
GitHub Bug反馈与修复全流程指南
github·bug
初圣魔门首席弟子2 天前
bug 2026.05.15(以前能运行的java springboot项目突然间不能运行后台数据了)
java·开发语言·bug
Desenberg2 天前
【Claude Code】因为中途修改配置路径导致Claude Code 插件安装失败
windows·bug
QuestLab3 天前
维护 Hermes Agent CN 过程中的碎碎念,以及从bug上得到的一点点启发
bug
java修仙传3 天前
Java 实习日记:一次 Excel 导入校验 Bug 的定位与数据更新逻辑优化
java·数据库·bug·excel·后端开发
当战神遇到编程3 天前
软件测试基础入门:从 BUG 到测试用例设计完整指南
测试用例·bug
Bear on Toilet6 天前
3. BUG篇
bug
编程探索者小陈6 天前
【测试】之BUG篇
bug
棋宣6 天前
uni-app编译到微信小程序中,父传子props首次传递数据不接收的bug
微信小程序·uni-app·bug
wqdian_com6 天前
华为手机浏览器的一个bug
服务器·华为·bug