堆溢出bug定位调试修复

ops/2024/10/15 17:51:15/

最近代码出了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博客


http://www.ppmy.cn/ops/42633.html

相关文章

第三章、汇编3

过程 运行时栈 首先看看运行时栈的布局: 解释一波: 当函数P调用Q的时候,首先为要为Q准备参数,6个参数的时候可以放在寄存器里,当多于6个参数的时候可以暂存在栈里。这里注意,实际Q的第七个参数是从rsp的…

【热门话题】CentOS 常见命令指南

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 CentOS 常见命令指南一、文件与目录操作1. 切换目录2. 查看当前目录3. 列出目录…

C++容器之无序多集(std::unordered_multiset)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 find3.6 count3.7 equal_range3.8 emplace3.9 emplace_hint3.10 insert3.11 erase3.12 clear3.13 swap3.14 bucket_count3.15 max_bucket_count3.16 bucket_size3.17 bucket3.18 load_fa…

数据库(vb.net+OleDB+Access)简易学生信息管理系统

在我们日常生活当中,数据库一词往往离不开我们的编程界,在学校、仓库等方面起着存储数据及数据关系作用的文件。相较于Excel,Access可以存储无限多的记录,内容也十分丰富,例如文本、数字、日期、T&F等。而且不需要…

截图工具PixPin(比Snipaste更强大)

PixPin官网链接:https://pixpinapp.com/ 最近新出的一款截图工具PixPin,比Snipaste功能多一些。在Snipaste功能基础上,还支持长截图,截动图,文本识别。

【React】Ant Design 5.x版本table scroll滚动条样式自定义

新版里table的滚动条样式由:scrollbar-width、scrollbar-color接管,导致之前的伪类方式失效! 环境 antd: ^5.14.1react: ^18 解决方案: 若想延续伪类方式修改滚动条样式,可以在定义伪类样式文件里加入以下片段: .a…

KubeKey 安装 K8s

官网教程 在 Linux 上以 All-in-One 模式安装 KubeSphere 步骤 1:准备 Linux 机器 若要以 All-in-One 模式进行安装,您仅需参考以下对机器硬件和操作系统的要求准备一台主机。 硬件推荐配置 操作系统最低配置Ubuntu 16.04, 18.04, 20.04, 22.042 核 …

Mac启用三指拖移

1. 简介 在使用mac的用户中大部分都会开启三指拖移功能,它能大大简化选中文字、修改窗口大小、拖动窗口等操作。 什么是三指拖移? 三指拖移是macOS触控板的一种手势功能,允许用户用三根手指在触控板上进行拖动操作,而无需按住触…