通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃

2023-11-07 09:52

本文主要是介绍通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

C++程序异常调查专栏


文章目录

  • 系列文章目录
  • 前言
  • 一、GFlags是什么?
  • 二、如何获取GFlags
  • 三、使用步骤
    • 1.确认GFlags是否已经安装
    • 2.以管理员权限启动Command prompt
    • 3.GFlags有效设定
    • 4.检查GFlags有效设定是否成功
    • 5.根据客户复现步骤运行程序
  • 总结


前言

客户PC上如果发生程序崩溃,在没有dump、log等调查文件的时候,需要尝试按照客户的步骤去复现该程序崩溃。但往往能够顺利复现的概率很小。针对野指针、内存越界等造成的程序崩溃,利用GFlags工具能够显著的提高复现的几率。


一、GFlags是什么?

GFlags 是全局标志编辑器,用于启用和禁用高级调试、诊断和故障排除功能。驱动程序开发人员和测试人员通常使用 GFlags 直接或通过在测试脚本中包含 GFlags 命令来启用调试、日志记录和测试功能。页堆验证功能可帮助你识别 内核模式 驱动程序中的内存泄漏和缓冲区错误。

GFlags 具有对话框和命令行接口。 这两个接口提供大多数功能,但某些功能只能从其中一个接口访问。

二、如何获取GFlags

GFlags.exe 包含在WinDbg调试工具中。

WinDbg官网下载

安装WinDbg调试工具后,默认在以下目录中安装 64 位版本的 gflags.exe 。
C:\Program Files(x86)\Windows Kits\10\Debuggers\x64

如果运行的是 32 位版本的 Windows,请使用位于此处的 32 位版本的 gflags.exe :
C:\Program Files(x86)\Windows Kits\10\Debuggers\x86

三、使用步骤

1.确认GFlags是否已经安装

进入安装目录去确认

2.以管理员权限启动Command prompt

以管理员权限启动Command prompt启动后,移动到GFlags的安装目录)

C:\WINDOWS\system32>cd\
C:\>cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>

3.GFlags有效设定

输入以下命令设置程序的GFlags有效,如果要设置多个程序,依次输入以下命令即可。

gflags.exe /p /enable Aa.exe /full

命令运行后,会有如下提示告诉你设定成功

C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>gflags.exe /p
/enable Aa.exe /full Warning: pageheap.exe is running inside WOW64.
This scenario can be used to test x86 binaries (running inside WOW64)
but not native (IA64) binaries.

path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File
Execution Options
Aa.exe: page heap enabled

4.检查GFlags有效设定是否成功

输入以下命令查看已经设定GFlags有效的程序

 gflags.exe /p

命令运行后,查看设定成功的程序是否和设定的一致

C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>gflags.exe /p
Warning: pageheap.exe is running inside WOW64.
This scenario can be used to test x86 binaries (running inside WOW64)
but not native (IA64) binaries.path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution OptionsAa.exe: page heap enabled with flags (full traces )Bb.exe: page heap enabled with flags (full traces )Cc.exe: page heap enabled with flags (full traces )

也可以直接到注册表去查看

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

注意64位操作系统,注册表地址如下

SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

找到对应的程序,查看其值,设定有效如下
设定有效状态
设定无效如下
设定无效状态

5.根据客户复现步骤运行程序


总结

这篇关于通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/362849

相关文章

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int