C++ 尝试抛出异常时发出SIGABRT
我有一个非常奇怪的问题,我花了好几个小时才注意到: 如果对我正在使用的软件输入错误,我可以生成一个异常(这当然是有意的)。这很好,我在执行程序时看到了正确的错误消息。 但是,当我通过API传递完全相同的输入时(产生几乎相同的控制流),程序崩溃。通过调试,我看到以下内容(我使用gdb进行调试):C++ 尝试抛出异常时发出SIGABRT,c++,exception-handling,virtual-functions,C++,Exception Handling,Virtual Functions,我有一个非常奇怪的问题,我花了好几个小时才注意到: 如果对我正在使用的软件输入错误,我可以生成一个异常(这当然是有意的)。这很好,我在执行程序时看到了正确的错误消息。 但是,当我通过API传递完全相同的输入时(产生几乎相同的控制流),程序崩溃。通过调试,我看到以下内容(我使用gdb进行调试): 异常类(在本例中称为userexption,该类没有任何虚拟方法,其前辈也没有任何虚拟方法)已成功实例化 当我单步执行“throw语句”(我想说的是,我只是在异常对象实例化后继续单步执行)时,我得到以下
- 异常类(在本例中称为userexption,该类没有任何虚拟方法,其前辈也没有任何虚拟方法)已成功实例化
- 当我单步执行“throw语句”(我想说的是,我只是在异常对象实例化后继续单步执行)时,我得到以下输出:
Best Markus我想知道您是否从构造函数或析构函数调用了某些(非纯)虚方法,或者可能是某些强制转换出错了。我想,您应该在exception类中检查这一点,因为您在抛出它的一个实例时得到了错误 事实上,编译器将阻止您拥有一个未实现纯虚函数的类。另一方面,虚函数多态性在构造函数和析构函数中并不完全安全 只是一个建议,但没有看到代码,这只是一个假设
我还将创建一个干净的构建,可能出于某种原因您有一些过时的对象。-两个堆栈(包括throw语句之前和之后的堆栈)您是否在
zorba::UDFunctionCallIteratorState::~UDFunctionCallIteratorState
中有虚拟调用?或者实例UDFunctionCallIteratorState
的悬空指针检查zorba::http_client::general\u evaluate
函数的try块中的局部变量。没有发现任何异常,但正如sergio I所建议的那样我尝试了一个干净的构建,这不知怎么解决了问题。我现在创建了一个干净的构建,这解决了问题!!我不明白-这是什么地方的虫子吗?(就像我们的构建系统、cmake甚至编译器/链接器)。你知道这是怎么发生的吗?无论如何:谢谢你的回答!我认为这与某些编译器/链接器优化走错了方向有关。原则上,这根本不应该发生;尽管它发生了。