问题标签 [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 投票
0 回答
493 浏览

c - 为什么 Application Verifier 找不到内存泄漏?

我正在使用 Windows 10 应用程序验证程序,x64 版本 10.0.10586。它勾选了所有“基本”复选框,包括“泄漏”。奇怪的是,应用程序验证程序正在为内存实现一个页面保护堆,因为 malloc 调用在页面末尾返回内存。

DLL 代码:

主要代码:

输出如下:

应用验证程序未能报告任何一个泄漏。

如果我启用 _CrtDbgFlag 调用,然后通过在应用程序关闭时打印它来验证实际上 malloc 是否泄漏:

为什么应用程序验证器不起作用?如果我在 main() 而不是 DLL 中分配内存,它也无法找到泄漏,但我认为这是它的一个已知限制。

0 投票
1 回答
327 浏览

c++ - GetExitCodeProcess() 使用 Application Verifier 引发第一次机会异常

我使用 CreateProcess() 运行可执行文件并在最后调用 GetExitCodeProcess() 以获取进程的退出代码。当我使用应用程序验证程序运行它时,我得到了第一次机会异常。我附上了一张日志的图片。在此处输入图像描述

第 1348 行是 GetExitCodeProcess() 调用之后的行。我对日志格式不是很熟悉,所以我问的是 GetExitCodeProcess() 中抛出的异常,在这种情况下我可以忽略它还是我在代码中做错了什么,因为它指向调用 GetExitCodeProcess 之后的行()?

编辑:我的代码:

0 投票
0 回答
1201 浏览

memory-leaks - 一个堆分配被泄露,Application Verifier/WinDbg

我正在使用 Application Verifier 和 WinDbg 调试可执行文件。我在“基本”下打开了“泄漏”测试。我的问题是,当 Application Verifier 发现泄漏时,它似乎进入了某种抛出异常的无限循环。我收到这样的错误:

但是当我按下F5继续调试时,我再次(一次又一次地)收到完全相同的消息,只是地址信息略有不同。

为什么会这样?有没有办法在不完全关闭泄漏检查的情况下忽略此泄漏?就目前而言,我无法完成我的程序以测试其他问题,因为应用程序验证程序在此泄漏上“挂起”。

0 投票
0 回答
913 浏览

c++ - 使用应用程序验证程序查找堆损坏原因

我的 C++ 应用程序有一些问题。当我使用 Clion 的调试器时 - 一切都很好。但是当我使用已编译的可执行文件(在 Windows 下)并尝试使用与在调试模式下相同的输入文件运行它时- 应用程序崩溃。因为我在调试中找不到迷恋的原因 - 在互联网上的一些搜索让我找到了微软的应用程序验证工具。

它可以诊断崩溃+显示堆栈跟踪,但我的问题是我无法将堆栈跟踪中的名称转换为 C++ 中的方法名称

这是错误部分(我的应用程序名称是 gridSolver):

可以请人帮忙吗?也许还有其他方法可以解决这个问题?

0 投票
1 回答
696 浏览

debugging - 应用程序验证程序停止:HKEY 泄露

在使用 Application Verifier 和 windbg 调试我的 VSTO 插件之一时,我发现在 Word 关闭时我得到以下停止:

找出此停止原因的最佳方法是什么?

按照我的建议dps 0422EA9C

并返回以下内容:

然后du 1D3F6FE8

回来

有趣的是,如果我在没有加载插件的情况下在 Word 上运行 Application Verifier / WinDbg,我仍然会停下来:

这是同一件事,但报告不同吗?

0 投票
0 回答
141 浏览

c++ - Windows AppVerifier 在退出时捕获的简单 C++ 程序

我的简单测试代码dummy.cpp

Windows AppVerifier(v4.0) 总是在代码退出时捕获。我不知道出了什么问题。我的 ApplicationVerifier 配置: 配置

当 dummy.exe 退出时:

异常窗口 视觉工作室调试窗口

更新:@VTT 的评论很有帮助。我通过https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk将 Appliction Verifier 更新到 10.0 版 在此处输入图像描述

0 投票
1 回答
556 浏览

c++ - 从 C++ 应用程序中删除应用程序验证程序

我正在开发的应用程序遇到堆损坏,所以我尝试使用应用程序验证器来跟踪它,但现在我似乎无法删除应用程序验证器。

运行原始程序会自动加载验证程序,将其从应用程序验证程序中删除或卸载应用程序验证程序没有帮助。

注册表项是我的一个线索,但我不确定如何处理它们。

0 投票
1 回答
568 浏览

debugging - 附加到 Windows 服务时无法在 windbg.exe 中获得确切的异常

我正在尝试使用 Windows 调试工具 (WinDbg.exe) 调试服务,因为我的服务在生产中引发了未处理的异常。我按照Microsoft 的说明进行操作,我能够附加/调试该服务,它会写入一个包含异常信息的日志。

但是日志的编写没有任何具体细节,如下所示。我只是想知道如何从异常中获取确切的调用堆栈、异常消息和程序集引用。

服务器详细信息:Windows Server 2012 R2

0 投票
2 回答
981 浏览

winapi - 应用程序验证程序在调用 ShellExecuteEx 时报告访问冲突

简洁版本

应用程序验证程序说运行代码时存在访问冲突:

它出什么问题了?

长版

我在Application Verifier下运行我的应用程序,并启用了检测堆损坏的选项:

  • Heaps:检查堆错误。

在此处输入图像描述

在调用ShellExecuteEx期间,出现异常,表明存在堆损坏。

在调试器中运行允许我解码异常:

在调试器之外运行,应用程序崩溃(WerFault 进行事后分析,进程终止)。

代码有什么问题?

例子

在崩溃之前,它会输出:

我想这可能是CreateProcess的常见错误,所以我确保它lpFile是可写的:

内存转储

使用 32 位构建(以使指针更易于阅读),将内存传递给ShellExecuteEx

用一个指向宽字符的指针:

然后它调用:

然后有很多我无法理解的东西,直到错误最终发生在ParseUrlW

带转储:


注意:此时EAX包含地址 0x0908BFE8:

提供的 pcszUrl 字符串为空?实际上没有,地址无效。但我们还不知道,直到代码尝试触摸它



注意:此时edi包含 0977FBDC


该代码尝试使用Move with Zero-Extend从 0x0908BFE8 复制第一个字。但该地址无效,导致访问冲突:

0x74b254ad 的访问冲突:读取地址 0x0908bfe8

因此,在ShellExecuteExW的代码中某处,它设置了对ParseUrlW的无效调用。

WinDBG

32位WinDbg,调试32位应用程序,带符号:

奖金阅读

0 投票
1 回答
360 浏览

windows - 应用程序崩溃但应用程序验证程序未显示错误

我在我的应用程序上使用了 Microsoft Application Verifier。

我的程序工作正常,直到我打开“低资源模拟”。此时,我的短暂启动然后从屏幕上消失(关闭?)。当我查看应用程序验证程序日志时,每个日志旁边都会显示“0 个警告,0 个错误”。

为什么 Application Verifier 不记录崩溃?


Win 10 64 位
我的应用是 32 位
应用程序验证器 64 位