c++程序在不执行catch块的情况下终止
C++ program terminates without executing the catch block
我正在使用mpi并行运行代码我的程序终止并显示Assertion (unsigned long)(size) >= (unsigned long)(nb) failed terminated by signal 6
我在我的主try和catch中添加了如下
int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
int rankid;
MPI_Comm_rank(MPI_COMM_WORLD, &rankid);
try
{
call functions
}
catch(...)
{
cout<<"error from "<<rankid<<endl;
throw;
}
return 0;
}
我正在使用mpicxx example.C
编译我的代码并通过
mpirun -np 2 ./a.out
我的代码没有打印catch中的短语就终止了,是不是try and catch应该强制我的程序执行catch
在您的call functions
中,可能有assert()
的用法。如果断言失败,结果是通过调用abort()
退出程序,它(与你的实现,即编译器/库)产生一个SIGABRT
(值6
)信号。
问题是,abort()
不需要——通常也不会——抛出c++异常(因为它继承自C语言,而C语言对c++异常一无所知)。类似地,引发SIGABRT
信号(你的实现在abort()
中使用的方法)以一种与c++异常无关的方式退出程序。
catch(...)
子句捕获的唯一东西是c++异常。它不是用于拦截任何导致程序终止的事件的包罗万象(没有双关语的意思)。
可以通过使用signal()
函数来建立适当的信号处理程序来截取SIGABRT
信号。在实践中,找出导致call function
调用abort()
的原因可能会更有成效。换句话说,确保它断言的条件是有效的。要弄清楚如何做到这一点,您需要阅读所调用函数的文档。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 在没有程序的情况下询问用户相同的事情被终止 C++
- 为什么一个指向char的C++指针在缺少null终止符的情况下充当字符串
- C++:在没有活动异常(GCC)的情况下终止调用
- 无法在线程运行方法中运行CryptoPP FileSink的情况下终止Qt线程
- C++线程:在没有活动异常的情况下终止调用
- 需要帮助以在未经用户同意的情况下停止程序终止
- 如何在不终止主应用程序的情况下卸载 ActiveX 的 ocx 以允许覆盖 ocx?
- 如何在没有任何指示终止的输入的情况下摆脱这种"loop"?
- 如何在不终止应用程序的情况下关闭GLUT窗口
- C++:如何在没有特定"interruption points"的情况下干净地终止线程
- c++程序在不执行catch块的情况下终止
- 如何在不破坏主框架的情况下终止wxWidgets消息循环
- 在没有活动异常的情况下调用c++终止
- 在没有活动异常线程的情况下终止调用
- 如何在不终止程序的情况下停止std::线程的运行
- 可变模板类终止情况下的直接访问有效,但方便类访问无法编译
- 在不终止程序的情况下将动态分配的内存返回给操作系统