调试工具:应用程序验证器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/215355

相关文章

线程池ThreadPoolExecutor应用过程

《线程池ThreadPoolExecutor应用过程》:本文主要介绍如何使用ThreadPoolExecutor创建线程池,包括其构造方法、常用方法、参数校验以及如何选择合适的拒绝策略,文章还讨论... 目录ThreadPoolExecutor构造说明及常用方法为什么强制要求使用ThreadPoolExec

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二