我一直在努力弄清楚为什么 StartElement 事件处理程序抛出的异常没有被我的应用程序捕获,该应用程序使用 expat 解析器(在 C 中)。应用程序只是终止说它找不到 catch 块,尽管我有所有的 catch 块。只是因为异常是从我自己的事件处理程序中抛出的,所以 expat 的 XML_Parse API 无法将其传递给我拥有所有 catch 块的代码。一位名为“Michael Anderson”的stackoverflow用户建议使用必要的gcc标志重建expat lib以使expat lib处理异常。有人可以让我知道那些标志是什么吗?或者建议一种更好的方法来处理事件处理程序中的错误,例如起始元素、结束元素等
如果我在注册的事件处理程序中遇到任何异常,我希望 XML_Parse API 返回 0。请帮忙。提前致谢。
这是代码:
try
{
if( ! XML_Parse(.....) )
{
throw exception;
}
}
catch(...)
{
}
在工作场景中,如果XML_Parse遇到格式错误的xml文件,它会立即返回零,我进入if块并抛出异常,并且它被很好地捕获。但是在有问题的情况下,异常是从事件处理程序中抛出的,但是我的应用程序转储了核心,并且核心堆栈说它找不到 catch 并最终调用 std::terminate 并中止。现在,当我想从事件处理程序中抛出用户定义的异常时,如何使 XML_Parse 返回零?