本文主要是介绍调试工具:应用程序验证器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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!