首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pantheios的第一次机会异常

Pantheios的第一次机会异常
EN

Stack Overflow用户
提问于 2012-04-22 23:00:06
回答 1查看 1.4K关注 0票数 0

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

代码语言:javascript
运行
复制
hFile = CreateFileA("logging-bailout.txt"
                ,   GENERIC_WRITE
                ,   0
                ,   NULL
                ,   OPEN_ALWAYS
                ,   0
                ,   NULL); <--- this is where it crashes, line 442

和信息:

代码语言:javascript
运行
复制
First-chance exception at 0x7769f8cd in myapp.exe: 0xC0000008: An invalid handle was specified.


=======================================
VERIFIER STOP 0000000000000300: pid 0x3814: Invalid handle exception for current stack trace. 

    00000000C0000008 : Exception code.
    00000000111DE950 : Exception record. Use .exr to display it.
    00000000111DE460 : Context record. Use .cxr to display it.
    0000000000000000 : Not used.


=======================================
This verifier stop is continuable.
After debugging it use `go' to continue.

=======================================

在控制台记录之前,我发现了Pantheios的异常,我并不太在意。然而,当应用程序在第一次使用Pantheios进行日志记录时崩溃时,我就该处理这个问题了,但我不太确定该如何处理。

在设置我的Pantheios:http://www.codeproject.com/Articles/27119/Using-Callback-Back-ends-with-the-Pantheios-Loggin时,我遵循了这个指南

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

代码语言:javascript
运行
复制
#include <pantheios/pantheios.hpp>
#include <pantheios/inserters/boolean.hpp>
#include <pantheios/inserters/integer.hpp>
#include <Shared/logs.h>

H包含:

代码语言:javascript
运行
复制
#include <pantheios/implicit_link/core.h>
#include <pantheios/implicit_link/fe.simple.h>
#include <pantheios/implicit_link/be.WindowsConsole.h>

在进行任何日志记录之前,我还会调用pantheios::init();

我正在使用Visual 2010,并在“附加依赖项”下包含以下库文件:

代码语言:javascript
运行
复制
$(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

但是,我所有的日志记录都是这样的:

Myapp.exe中0x750bb9bc处的第一次异常: Microsoft C++异常:内存位置为0x1822bda 0的stlsoft::winstl_project::windows_exception。 20120423-104817.497:未能将消息写入日志文件;给定消息如下: myapp.Qt.Framework.13424,23/04/201210:48:17.496;Debug:“一些日志”

调用pantheios::log(pantheios::debug, "some logging");

然后,我所有的日志记录都写到与项目相同的文件夹中的“紧急救援”文件中。这以前起过作用,但它是我的“待办事项清单”上的一颗大子弹(但比其他事情要低一点)。

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

EN

回答 1

Stack Overflow用户

发布于 2012-04-27 15:33:58

第一次机会例外只意味着抛出了异常。这并不意味着您的程序中有一个bug,只是调试器正在向您显示异常正在被抛出,因此您有机会在调用链上传播它之前检查它。如果异常被异常处理程序捕获(例如,用于日志记录),则应用程序将继续执行,否则调试器将给您第二次异常通知,通知您应用程序将因未处理的异常而退出。

如果不希望接收第一次异常通知,则可以在调试器中关闭该通知。这个链接可能有助于在应用程序验证程序中关闭异常处理。

若要解决此问题,请关闭应用程序验证程序中的异常测试。要做到这一点,请执行以下步骤: 1.启动应用验证程序。 2.在“应用程序”下,单击要测试的GDI+程序。 3.在试验中,扩大基础。 4.单击以清除例外情况复选框。 5.运行您想要测试的GDI+程序。 还可以配置调试工具,以确保在发生访问冲突时不会在调试工具中遇到断点。

另一种方法(在MSVS中关闭异常通知)是通过“Debug-> exception .”

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

考虑到应用程序验证器的性质/目的,我建议采用后一种方法: AV是在告诉您,某些不正确的事情以前可能是可以的,但以后可能会引起问题(取决于环境、环境等)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10272903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档