繁体   English   中英

Pantheios的第一次机会异常

[英]First-chance exception with Pantheios

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

hFile = CreateFileA("logging-bailout.txt"
                ,   GENERIC_WRITE
                ,   0
                ,   NULL
                ,   OPEN_ALWAYS
                ,   0
                ,   NULL); <--- this is where it crashes, line 442

和消息:

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

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

#include <pantheios/pantheios.hpp>
#include <pantheios/inserters/boolean.hpp>
#include <pantheios/inserters/integer.hpp>
#include <Shared/logs.h>

logs.h包含:

#include <pantheios/implicit_link/core.h>
#include <pantheios/implicit_link/fe.simple.h>
#include <pantheios/implicit_link/be.WindowsConsole.h>

我也叫pantheios::init(); 在做任何记录之前。

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

$(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 ++异常:stlsoft :: winstl_project :: windows_exception在内存位置0x1822bda0 ..

20120423-104817.497:无法将消息写入日志文件; 给出的信息如下:[myapp.Qt.Framework.13424,23 / 04/2012 10:48:17.496 am; 调试]:“一些日志记录”

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

然后,我的所有日​​志记录都写入与项目相同的文件夹中的“bailout”文件。 这之前有用,但它是我的“待办事项列表”的一个重要内容(但比其他东西更低)。

所以现在我的问题是,我该如何解决这个问题? 按照我能找到的每个教程,但没有成功。 为什么我的应用程序在运行Ms Application Verifier后决定不再接受它? 没有意义。

第一次机会异常仅表示抛出异常。 这并不意味着您的程序中存在错误,只是调试器向您显示正在抛出异常,因此您有机会在它向上传播到调用链之前检查它。 如果异常由异常处理程序捕获(例如,用于记录),则应用程序将继续,否则调试器会为您提供第二次机会异常通知,以通知您应用程序将因未处理的异常而退出。

如果您不希望收到第一次机会异常通知,可以在调试器中将其关闭。 此链接可能有助于如何关闭Application Verifier中的异常处理。

若要解决此问题,请关闭Application Verifier中的异常测试。 为此,请按照下列步骤操作:

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

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

3.在测试下,展开基础知识。

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

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

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

替代方案(关闭MSVS中的异常通知)是通过“Debug-> Exceptions ...”

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

考虑到Application Verifier的性质/目的,我建议采用后一种方法:AV告诉你以前可能已经存在的不正确的事情,但可能会在以后引起问题(取决于环境,情况等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM