问题标签 [application-verifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1518 浏览

crash - 如何让 AppVerifier/WinDbg 在 Windows 10 上运行?

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

我试图将测试简化为使用基本测试将其连接到 Notepad.exe,这就是它的样子。请注意,保存按钮是灰色的,因为它确实已保存。如果您不点击保存,则不会生效。AppVerifier 记事本设置

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

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

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

它使用以下输出启动 WinDbg,这再次与我们项目的行为相匹配:在此处输入图像描述

我承认,我以前从未使用过 WinDbg,并且不清楚我应该如何做到这一点。我的初衷是在我的项目中诊断堆损坏。所以希望有人能解释为什么它适用于某些人而不适用于其他人,或者我做错了什么。谢谢!

0 投票
2 回答
1212 浏览

visual-c++ - 如何使用 Application Verifier 在我的 DLL 中查找堆损坏?

我使用 Visual Studio 2017 开发了一个 C++ DLL,但我遇到了一些内存问题。我想使用Application Verifier对其进行调试,但运行我的 DLL(第三方应用程序)的应用程序也被堆损坏。因此,如果我激活应用程序验证程序,应用程序会在我的 DLL 加载之前崩溃。

是否可以对应用程序验证器说只处理 DLL 或模块的堆损坏?如果没有,有没有办法用其他工具调试我的 DLL?

0 投票
0 回答
117 浏览

application-verifier - Microsoft 的应用程序验证程序

当我单击 Windows 10 计算机的应用程序验证程序时,命令提示符出现,然后它消失了,而不是 GUI 打开。我需要启用什么才能使此应用程序正常工作吗?

0 投票
1 回答
224 浏览

c++ - 强制堆分配超过 4 GB

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

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

  • MSDN 论坛建议VirtualAlloc()在 CRT 初始化之前使用。但是,我不明白为什么不应该已经返回指向高地址的指针,而将底部的 4 GB 留空。

  • Raymond Chen 说,Windows 7 有一个开关Allocation­Preference ,可以设置为MEM_TOP_DOWN. 但是,这适用于整个系统,因此需要重新启动,这很不方便。(也在MSDN 上进行了描述)。

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

应用验证者

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

很遗憾,

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

虽然地址高于输入的值,但堆的大小没有改变:

这些应用程序验证器设置是否仍然有效?如何成功应用它们?

0 投票
1 回答
175 浏览

application-verifier - 以编程方式启用应用程序验证器

我有一个名为 foo.exe 的程序(一个单元测试运行程序),我想使用一组特定的应用程序验证器标志来运行它。该程序作为持续集成系统的一部分在各种计算机上运行,​​以检查错误。我想以编程方式启用应用程序验证程序,运行我的单元测试,然后重置系统状态,以便应用程序验证程序不会在其他开发人员运行的任何类似名称的程序上运行(事实上我们的 CI 系统没有完全-构建之间的清理是超出此范围的单独问题)。

0 投票
1 回答
87 浏览

debugging - 为什么在 64 位 Windows 下使用 ApplicationVerifier 进行堆调试时,会将 32 位进程限制为 2 GiB 的虚拟内存?

我想使用 Windows 10 SDK(版本 10.0.18362.1)提供的 ApplicationVerifier 来加速调试在 64 位 Windows 10(内部版本 1909)下运行的 32 位应用程序中的(可能的)堆损坏。不幸的是,启用堆时使用 Basic 列表下的默认设置(并且仅启用该功能)的功能,一旦其内存使用量接近 2 GiB,应用程序就会耗尽内存,即使应用程序本身被编译为大地址感知。

无论我使用 Application Verifier x86 还是 Application Verifier x64 来激活堆检查,都会出现此问题。(而且我什至不确定这两个版本之间的区别是什么。)

我已经通过“帮助”菜单搜索了可用的文档,该菜单实际上非常广泛,但没有找到任何原因。我知道插入保护页面并将分配的开始或结束对齐到页面边界会增加内存消耗,但我不希望它将可用内存减少一半或以其他方式限制虚拟地址空间,至少在没有明确启用此类设置的情况下不会堆功能的选项。有谁知道这种行为的原因并且可以告诉我如何规避这个限制?

0 投票
1 回答
88 浏览

application-verifier - 忽略 AppVerifier 中的 INVALID HANDLE 错误?

我针对第 3 方应用程序安装了 VerifierDlls。由于无效句柄错误,它不断崩溃:

我想知道有没有什么办法可以避免?我试图钩住 CloseHandle,但我不知道如何判断句柄是否无效。

从 procdump 我可以告诉 CloseHandle 是原因

有任何想法吗?

0 投票
0 回答
56 浏览

windows - VerifierFlags 的可能值

我在我的应用程序上启用了应用程序验证程序,它创建了一个VerifierFlags带有值的注册表值0x80000000

在哪里可以找到可能的 VerifierFlags 值列表?我试图在网上查找,我唯一找到的是关于驱动器的

有人知道吗?

0 投票
2 回答
3125 浏览

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

简单地说,我无法运行 App 验证程序(WOW 或 64 位)。它根本无法启动。事件查看器说:

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

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

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

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

应用程序验证者 Gui

0 投票
0 回答
191 浏览

java - 我如何才能找到 Windows 阻止 java.exe 的原因?

我遇到了一些非常奇怪的行为,我不知道如何处理它。我怀疑该行为在上次 Windows 升级后开始重现。但我不确定它是否有任何相关的东西。(我是在尝试运行使用java的maven时发现的)

行为如下:从命令行运行 java(例如 java.exe -version)时,它什么也不做(如下所示)。这个过程看起来像是挂了。 在此处输入图像描述

我做了以下测试:

  1. 克隆 java.exe(例如 jv.exe)并运行它。有用。在此处输入图像描述
  2. 将另一个应用程序重命名为 java.exe(例如 processmonitor.exe 为 java.exe)。运行应用程序时,它不会打开。在此处输入图像描述
  3. 将 java.exe 重命名为 java.exe.bkp 并将“java.exe”链接到“jv.exe”(有效),该进程被挂起。
  4. 将 java1.exe 另一个链接到 jv.exe 并且它可以工作。在此处输入图像描述
  5. 在有网络和没有网络的情况下完成了所有操作,没有区别(java.exe 不起作用,其他的工作)
  6. 以“保存模式”(+/- 网络)重新启动 Windows 并且 java.exe 有效
  7. 我从 Windows 禁用了防火墙,和/或我为 java.exe 添加了规则。它不起作用。

最初我安装了许多 JVM。我卸载了所有这些并只安装了图像中的一个。以上所有测试都是在新安装后进行的。

另外,我观察到每次运行 java.exe 时(但不是在运行 jv.exe 或 java1.exe 时),都会在 c:\Users\user.name\AppVerifierLogs 中创建一个新文件 java.exe.XXX.dat . 在此处输入图像描述在google上搜索,似乎是某种日志文件,可以使用此应用程序查看(https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/application- verifier),但我没有找到独立的应用程序。也许它已经安装在系统中,但我不知道在哪里或如何启用它。

似乎出于某种原因,Windows 正在阻止所有名为“java”的进程,无论它实际上是 java 程序还是任何其他应用程序。但我不知道可能是什么原因,或者如何继续调查。

如果有人能帮助我,我会很感激他。

谢谢你。