标签: application-verifier

如何使用Microsoft Application Verifier

使用C++,今天在演示期间发现我正在遭受损坏的堆(但仅在重要场合!!).我在SO上发现了一些帖子,并决定下载Application VerifierDebugging工具.我目前正在运行Visual Studio 2010.

所以,现在我已经安装了调试工具,我得到一个名为Windows Kits的文件夹.在文件夹中我有一个名为WinDbg的应用程序,我试图打开我的应用程序并运行它.它被罚款但我无法获得有关我的堆损坏的任何信息.然后我安装了验证器,它只给我留下了一个头文件和一个.dll文件,我不知道该怎么办.

所以,任何人都可以告诉我如何使用这个工具,这样我就不会再遭受这样的尴尬时刻了吗?一直在论坛上搜索,因为我甚至不知道如何打开验证器,当我阅读说明如何使用它时,我真的迷失了(从2009年开始)

c++ application-verifier heap-corruption

26
推荐指数
2
解决办法
3万
查看次数

在Visual Studio中配置"应用程序验证程序"

我看到我可以在Visual Studio 2008中启动应用程序验证程序Debug->Start With Application Verifier.但是,app验证程序文档显示了一系列可以配置的选项,如果它的UI是从Visual Studio单独启动的.我无法想象如何在Visual Studio中设置这些选项.

它变成了一种权衡.如果我从"调试"菜单启动应用程序验证程序,我会从应用程序验证程序获取有关执行中的缺陷的IDE集成响应.如果我在外部启动应用程序验证程序并配置特定选项,它仍然会在我的Visual Studio调试期间导致"停止",但是我没有得到IDE集成应用程序验证程序输出.

有谁知道如何访问app验证程序的配置功能,并且仍然具有VS完全集成的体验?

c++ debugging application-verifier visual-studio

14
推荐指数
1
解决办法
9552
查看次数

应用程序验证程序无法在 3 台单独的 Windows 机器上启动

简单地说,我无法运行 App verifier(WOW 或 64 位)。它根本没有开始。事件查看器说:

错误的应用程序名称:appverif.exe,版本:10.0.18362.1,时间戳:0x58ca3409 错误的模块名称:ntdll.dll,版本:10.0.18362.1139,时间戳:0x335bbdaf 异常代码:0xc000003030000000000000 偏移量应用程序启动时间:0x01d6aa7ad4a12bf6 错误的应用程序路径:C:\Windows\SysWOW64\appverif.exe 错误的模块路径:C:\WINDOWS\SYSTEM32\ntdll.dll 报告 ID:235c3a4d-2d54-4436-99bf-b59a7f7f

此外,我尝试在 Visual Studio 下运行 appverif.exe(在系统和 syswow64 中),我看到:

应用程序验证程序在 Visual Studio 调试器中崩溃

编辑(根据评论更新)有些人建议应用程序验证程序没有 GUI。但是,上次运行它时,我看到了以下内容:

应用验证器 GUI

windows debugging application-verifier visual-c++

13
推荐指数
2
解决办法
2551
查看次数

什么是Microsoft Application Verifier?

我已经安装了一些SDK的Microsoft Application Verifier.实际上我该如何使用它?有没有简单的例子/解释?

windows application-verifier

10
推荐指数
1
解决办法
8123
查看次数

如何使用Application Verifier查找内存泄漏

我想使用标准实用程序在我的应用程序中找到内存泄漏.以前我使用自己的内存分配器,但其他人(是的,你AlienFluid)建议使用微软的应用程序验证程序,但我似乎无法报告我的泄漏.我有以下简单的应用程序:

#include <iostream>
#include <conio.h>

class X
   {
   public:
      X::X() : m_value(123) {}
   private:
      int m_value;
   };

void main()
{
X *p1 = 0;
X *p2 = 0;
X *p3 = 0;

p1 = new X();
p2 = new X();
p3 = new X();
delete p1;
delete p3;
}
Run Code Online (Sandbox Code Playgroud)

此测试显然包含内存泄漏:p2是新的但未删除.

我使用以下命令行构建可执行文件:

cl /c /EHsc /Zi /Od /MDd test.cpp
link /debug test.obj
Run Code Online (Sandbox Code Playgroud)

我下载了Application Verifier(4.0.0665)并启用了所有检查.

如果我现在运行我的测试应用程序,我可以在Application Verifier中看到它的日志,但我没有看到内存泄漏.

问题:

  • 为什么Application Verifier报告没有泄漏?
  • 或者不是Application Verifier真的打算找到漏洞吗?
  • 如果没有哪个其他工具可用于在应用程序结束时清楚地报告泄漏(即不是通过拍摄常规快照并进行比较,因为这在1GB或更多的应用程序中是不可能的),包括调用堆栈的分配地点(因此不是CRT结束时的简单泄漏报告)

如果我找不到合适的实用程序,我仍然需要依靠自己的内存管理器(完美地完成它).

c++ windows memory-leaks application-verifier

9
推荐指数
1
解决办法
2万
查看次数

应用程序验证程序安装问题

我在Visual Studio 2010中的应用程序中安装了用于检测堆损坏的应用程序验证程序。它运行的操作系统是Windows7。我遇到的问题非常愚蠢:我无法启动应用程序验证程序。我读到它已安装在程序菜单中(但是我在那儿找不到应用程序验证程序),或者我只是运行AppVerif.exe(我也找不到)。在我的应用程序验证程序文件夹中,我只有REDIST.txt,vrfauto.dll,vrfauto.h和vrfauto.idl文件,而没有其他文件。我尝试再次卸载并重新安装它,但是该文件夹的内容保持不变,并且在我的计算机上没有AppVerif.exe的痕迹。在这一点上,我不知道该怎么办。我的应用程序卡住了,无法继续进行。请帮帮我!

application-verifier windows-7

5
推荐指数
1
解决办法
2981
查看次数

应用程序验证程序自动进程转储文件创建

我知道如何手动使用 AppVerif 和 windbg 来调试进程问题,但我正在组装一个自动化系统来运行一系列压力测试,而无需用户在场。

我需要一种方法来在 AppVerif 发现问题时生成进程转储,然后继续(假设这是一个非致命错误)。

有没有一种方法可以将 AppVerif 配置为正确地生成进程的转储而不是闯入,或者我是否必须附加 windbg 并以某种方式使其自动化以在中断时创建转储,然后继续。

windows windows-services windbg application-verifier

5
推荐指数
1
解决办法
1335
查看次数

如何在Windows 10上使用AppVerifier / WinDbg?

我在Windows 10 17134上,并安装了Windows 10 SDK 16299。我实际上有一个较旧的Windows版本和4个不同版本的SDK,但决定升级到最新的Windows版本并卸载我所有的Win10 SDK,并仅安装我们在项目16299中使用的版本。团队中的一些人能够运行AppVerifier,但大多数不能。

我已经尝试将测试简化为使用基本测试将其简单地连接到Notepad.exe,这就是下面的样子。请注意,保存按钮显示为灰色,因为它确实已保存。如果不单击“保存”,则任何内容都不会生效。AppVerifier记事本设置

然后,当我尝试直接运行notepad.exe时,出现以下错误: 记事本启动错误

这与我在项目中遇到的错误完全相同。现在仔细查看帮助文档,我发现: 调试器安装和设置

好了,所以我在安装完整的Windows 10 SDK时拥有WinDbg。然后按照指南运行建议的命令行:

> C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>windbg -xd av -xd
> ch -xd sov notepad.exe
Run Code Online (Sandbox Code Playgroud)

它使用以下输出启动WinDbg,该输出再次与我们项目的行为匹配: 在此处输入图片说明

我承认,我以前从未使用过WinDbg,也不清楚应该怎么做。我的最初意图是诊断我的项目中的堆损坏。因此,希望有人可以解释为什么它适用于某些人而不适用于其他人,或者我做错了什么。谢谢!

crash windbg launch application-verifier

5
推荐指数
1
解决办法
361
查看次数

强制堆分配超过 4 GB

同事将 32 位 C++ 应用程序转换为 64 位。出于测试目的,现在的想法是指示堆管理器仅返回 64 位范围内的地址。

\n\n

在网上搜索解决方案似乎并没有给出非常可靠的结果:

\n\n\n\n

我在应用程序验证器中进行了深入研究,并在条目的属性中发现了一些有趣的选项:

\n\n

应用验证器

\n\n

如您所见,我修改了SizeStartSizeEnd以及AddrStartAddrEnd

\n\n

很遗憾,

\n\n
    \n
  1. 这些文本框不接受 64 位地址
  2. \n
  3. 这些设置似乎没有效果
  4. \n
\n\n

虽然地址高于输入的值,但堆的大小并未更改:

\n\n
Termination on corruption : ENABLED\n          Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt …
Run Code Online (Sandbox Code Playgroud)

c++ windows 64-bit application-verifier

5
推荐指数
1
解决办法
311
查看次数

相当于托管应用程序的 Microsoft Application Verifier

您知道用于托管应用程序的任何等效的 Microsoft Application Verifier 吗?

谢谢!

clr managed application-verifier

2
推荐指数
1
解决办法
2085
查看次数