Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 潘提奥斯的第一次机会例外_C++_Visual Studio 2010_Pantheios - Fatal编程技术网

C++ 潘提奥斯的第一次机会例外

C++ 潘提奥斯的第一次机会例外,c++,visual-studio-2010,pantheios,C++,Visual Studio 2010,Pantheios,我的应用程序运行良好,直到我尝试使用应用程序验证程序进行调试。之后,我开始得到“第一次机会异常…:指定了无效句柄”,问题似乎出现在Pantheios中的“bailout.c”文件中: hFile = CreateFileA("logging-bailout.txt" , GENERIC_WRITE , 0 , NULL , OPEN_

我的应用程序运行良好,直到我尝试使用应用程序验证程序进行调试。之后,我开始得到“第一次机会异常…:指定了无效句柄”,问题似乎出现在Pantheios中的“bailout.c”文件中:

hFile = CreateFileA("logging-bailout.txt"
                ,   GENERIC_WRITE
                ,   0
                ,   NULL
                ,   OPEN_ALWAYS
                ,   0
                ,   NULL); <--- this is where it crashes, line 442
在控制台记录Pantheios的异常之前,我并不太在意。然而,现在当应用程序在第一次使用Pantheios登录时崩溃时,我该处理这个问题了,但我不太确定如何处理

我在设置Pantheios时遵循了以下指南:

在我记录的每个文件中,源文件中都有以下行:

#include <pantheios/pantheios.hpp>
#include <pantheios/inserters/boolean.hpp>
#include <pantheios/inserters/integer.hpp>
#include <Shared/logs.h>
但是,我的所有日志记录如下所示:

< P>第一个异常例外:MyApp.EXE中的0x750BB9B:微软C++异常:STLSOFT::WistSTLYPosi::WistOsSUB异常在内存位置0x1822BDA0..… 20120423-104817.497:将消息写入日志文件失败;给出的消息如下:[myapp.Qt.Framework.1342423/04/2012 10:48:17.496上午;调试]:“一些日志记录”

调用
pantheios::log(pantheios::debug,“somelogging”)

然后,我的所有日志记录都会写入项目所在文件夹中的“紧急援助”文件。这在以前是可行的,但在我的“待办事项清单”上却是一个大问题(但比其他事情要慢一点)

现在我的问题是,我该如何解决这个问题?我遵循了我能找到的每一个教程,但没有成功。为什么在运行Ms应用程序验证程序后,我的应用程序决定不再接受此选项?毫无意义。

仅表示引发了异常。这并不意味着您的程序中有bug,只是调试器向您显示正在抛出异常,因此您有机会在异常向调用链传播之前对其进行检查。如果异常处理程序捕捉到异常(例如用于日志记录),则应用程序将继续,否则调试器将再次发出异常通知,通知您由于未处理的异常应用程序将退出

如果不希望接收第一次机会异常通知,可以在调试器中关闭它。可以帮助您关闭应用程序验证程序中的异常处理

要解决此问题,请关闭应用程序验证程序中的异常测试。要执行此操作,请执行以下步骤:

1.启动应用程序验证程序

2.在应用程序下,单击要测试的GDI+程序

3.在测试下,展开“基础”

4.单击以清除例外复选框

5.运行要测试的GDI+程序

您还可以配置调试工具,以确保在发生访问冲突时,调试工具中不会出现断点

替代方法(关闭MSV中的异常通知)是通过“调试->异常…”

或者,如果可能的话,确保一开始不会抛出异常。您需要检查异常的性质(例如,未找到文件),并修复阻止预期操作的条件


考虑到应用程序验证程序的性质/用途,我建议采用后一种方法:AV告诉您发生了一些不正确的事情,以前可能还可以,但以后可能会导致问题(取决于环境、情况等)

是的,我将其关闭,因此现在它不再崩溃。然而,我不能在我的日志中有这条消息,因为它使我很难阅读。我仍然不知道如何让它消失..如何在自定义日志中写入第一次出现的异常消息?如果您正在捕获所有异常并记录它们,那么您可以确定具体抛出了什么异常并忽略它。理想的解决方案仍然是在首先调用
CreateFileA
时修复导致异常的条件,不记录异常,但“20120327-112911.994:未能将消息写入日志文件;给定消息如下:”是的,这将是一个理想的解决方案,但由于我不知道如何解决这个问题(只是按照教程来达到我的目的),我希望有人可能有同样的问题并解决了:)这可能实际上是AppVerifier中的一个bug:有类似的问题,尽管还没有答案,但“异常分析”部分声明句柄的空值被视为无效。OTOH声明传递句柄的空值是可以的。作为一种解决方法,在AppVer下测试时,将紧急救援日志文件视为常规文件。
#include <pantheios/pantheios.hpp>
#include <pantheios/inserters/boolean.hpp>
#include <pantheios/inserters/integer.hpp>
#include <Shared/logs.h>
#include <pantheios/implicit_link/core.h>
#include <pantheios/implicit_link/fe.simple.h>
#include <pantheios/implicit_link/be.WindowsConsole.h>
$(PANTHEIOS_ROOT)\lib\pantheios.1.core.vc10.mt.debug.lib
$(PANTHEIOS_ROOT)\lib\pantheios.1.be.WindowsConsole.vc10.mt.debug.lib
$(PANTHEIOS_ROOT)\lib\pantheios.1.fe.simple.vc10.mt.debug.lib
$(PANTHEIOS_ROOT)\lib\pantheios.1.util.vc10.mt.debug.lib