gpt4 book ai didi

c++ - 外派异常处理

转载 作者:行者123 更新时间:2023-11-30 04:27:08 26 4
gpt4 key购买 nike

我一直在努力弄清楚为什么从 StartElement 事件处理程序抛出的异常没有被我的应用程序捕获,该应用程序使用 expat 解析器(在 C 中)。应用程序只是终止说它找不到 catch block ,尽管我已经准备好所有 catch block 。只是因为异常是从我自己的事件处理程序中抛出的,所以 expat 的 XML_Parse API 无法将其传递到我拥有所有 catch block 的代码中。其中一位名为“Michael Anderson”的 stackoverflow 用户建议使用必要的 gcc 标志重建 expat lib,以使 expat lib 处理异常。有人可以告诉我这些标志是什么吗?或者建议一种更好的方法来处理事件处理程序中的错误,例如起始元素、结束元素等

如果我在注册的事件处理程序中遇到任何异常,我不知何故希望 XML_Parse API 返回 0。请帮忙。提前致谢。

代码如下:

try 
{
if( ! XML_Parse(.....) )
{
throw exception;
}
}
catch(...)
{
}

在工作场景中,如果XML_Parse遇到格式错误的xml文件,它会立即返回零,我进入if block 并抛出异常,并被捕获。但在有问题的情况下,异常是从事件处理程序中抛出的,但我的应用程序转储了核心,核心堆栈说它找不到 catch 并最终调用 std::terminate 和中止。现在,当我想从事件处理程序中抛出用户定义的异常时,如何使 XML_Parse 返回零?

最佳答案

根据 expat.h,当您在处理程序中遇到需要中止解析的错误时,您应该调用 XML_StopParser(parser, 0)。

XML_Parse 然后将返回 XML_FALSE。那时您可以调用特定于应用程序的错误处理

关于c++ - 外派异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com