【发布时间】:2010-10-29 03:25:27
【问题描述】:
我正在使用 swig 用 python 包装来自 C++ 库的类。它总体上可以工作,但是从库中抛出了一个异常,我似乎无法在 swig 界面中捕获它,所以它只会使 python 应用程序崩溃!
类 PyMonitor.cc 描述了所需类 Monitor 的 swig 接口。 如果连接失败,Monitor 的构造函数会抛出异常。我想在 PyMonitor 中处理这个异常,例如:
PyMonitor.cc:
#include "Monitor.h"
// ...
bool PyMonitor::connect() {
try {
_monitor = new Monitor(_host, _calibration);
} catch (...) {
printf("oops!\n");
}
}
// ...
但是,connect() 方法从不捕获异常,我只是得到一个“抛出...后调用终止”错误,然后程序中止。
我对 swig 不太了解,但在我看来,这一切都很好 C++,异常应该在终止程序之前传播到 connect() 方法。
有什么想法吗?
【问题讨论】:
-
您确定输入了您的连接方法吗?您可以调试代码并在调试器中单步执行。这应该会告诉你问题出在哪里。
-
是的,connect方法肯定输入了,我在上面的代码中省略了它们,但是在分配给_monitor之前和之后的try块中有printf和fflush(stdout)。打印了之前的一个,但是 Monitor 的构造函数抛出了异常,并且第二个没有输出。关于调试,您对此有任何指示吗?由于它实际上是调用这些方法的python代码,因此在这种情况下我对调试知之甚少。基本的 gdb 技巧会起作用吗?
-
也许 Monitor 构造函数捕获异常并在内部终止运行时...?
-
你是否在你的 c++ 库中使用了一个自定义的内存分配器,它暴露给了 python?