外籍人士异常处理
expat exception handling
我一直在努力弄清楚为什么我的应用程序没有捕获从 StartElement 事件处理程序抛出的异常,该应用程序使用 expat parser( in C 语言)。应用程序只是终止说它找不到 catch 块,尽管我已经准备好了所有 catch 块。只是由于异常是从我自己的事件处理程序中抛出的,因此 expat 的 API 无法将其传递给我拥有所有 catch 块的代码XML_Parse。一位名为"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返回零?
根据 expat.h,当您在处理程序中遇到需要中止解析的错误时,您应该调用 XML_StopParser(parser, 0)。
然后XML_Parse返回XML_FALSE。此时,您可以调用特定于应用程序的错误处理
相关文章:
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Firebase C++VS2018 SDL2-在Firebase::app::create(..)上执行异常处理
- 使用 stoi 功能进行异常处理
- 子系统中的异常处理:本机
- 与异常处理程序中的操作员<<不匹配
- 数组 C++ 上的异常处理程序
- 异常处理:如果用户输入不是三个特定字符之一
- C++ 异常处理错误输出
- 视觉 std::矢量无异常:警告 C4530:使用了C++异常处理程序,但未启用展开语义.指定 /EHsc
- C++交换机状态异常处理
- 在字符串类上的成员函数和out_of_range异常处理
- 奇怪的消息 (_Base_bitset::_M_do_to_ulong) 从溢出异常处理程序中打印出来
- 执行视觉工作室异常处理模式
- 为什么隐式转换在异常处理中从派生到基?
- C++执行期间的类成员函数错误/异常处理
- C++ 中未处理的异常处理程序
- 用户定义的异常处理
- C :ScopeGuard vs返回支票和异常处理
- 外籍人士异常处理