调试工具:应用程序验证器Application Verifier(配合WinDbg)

本文主要是介绍调试工具:应用程序验证器Application Verifier(配合WinDbg),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.应用程序验证器(Application Verifier)简介

说明:Application Verifier是来自微软官方的一款应用程序验证工具,主要用于帮助用户检测和调试内存损坏、危险的安全漏洞、Run-time检测等;是一款辅助开发工具,不用修改源码;在程序退出时报告未释放的资源等,程序正常退出才会有报告

获取:可以通过windows software development Kit 管理器来下载最新版

推荐:应用程序验证器和WinDbg在很多场景下配合使用

原理:hook掉分配和释放资源的API,做一些检查和记录

2.Application Verifier使用

应用程序验证程序 - 概述 - Windows drivers | Microsoft Learn

点击Add Application加载exe文件后,再点击Save即可:


3. WinDbg使用

WinDbg (用户模式) 入门 - Windows drivers | Microsoft Learn

使用Windbg静态分析dump文件的一般步骤及要点详解_windebug分析dump-CSDN博客

常用指令:

.reload /f xxx.exe   强制加载xxx.exe对应的xxx.pdb

lm vm xxx*     查看是否已加载xxx.exe、xxx.pdb

g     执行

kn   堆栈信息

!analyze -v    问题自动排查

4.Application Verifier配合WinDbg使用

调试工具:应用程序验证器Application Verifier一页纸(appverif+WinDbg+gflags)- 详细版-CSDN博客

以1个堆内存释放二次的错误为例,体现Application Verifier配合WinDbg使用相比于WinDbg单独使用的优势:

heap_test.cpp

#include <stdio.h>void main(int argc, char* args[]) {char* psz = NULL;psz = new char[10];printf("22222222222222222");delete[] psz;delete[] psz;			//二次释放//int a = 12;//int b = 0;//printf("111111111111111");//int c = a / b;//printf("c = %d", c);printf("3333333333333333");int a = 12;int b = 12;int c = 12;int d = 12;int e = 12;int f = 12;printf("4444444444444444");return;
}

 ① 只用WinDbg调试

可以看到是因为指令异常中断到调试器(错误码0x80000003),但提示信息没什么价值。

② Application Verifier配合WinDbg调试

这次报Access violation - code c0000005,结合报错行数为heap_test.cpp的第16行,可以看到是因为指针psz被释放了两次。

这篇关于调试工具:应用程序验证器Application Verifier(配合WinDbg)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和