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

相关文章

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

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

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

基于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参数指定命

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链