私は、pythonでC++ライブラリからクラスをラップするためにswigを使用しています。それは全体的に機能しますが、ライブラリ内から例外がスローされ、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()メソッドに伝播する必要があります。
どのような考えですか?
接続方法はまったく入力してもよろしいですか?あなたのコードをデバッグし、デバッガでそれを一歩進めることができます。それは問題がどこにあるかを示すはずです。 – lothar
はい、connectメソッドは間違いなく入力されていますが、上記のコードでは省略しましたが、_monitorへの代入の前後にtryブロックにprintfとfflush(stdout)があります。以前のものが出力されますが、例外はMonitorのコンストラクタによってスローされ、2番目の出力は出力されません。 デバッグに関しては、これについての指針はありますか?実際にはこれらのメソッドを呼び出すPythonコード以来、私はこの場合のデバッグについてあまり知らないです。基本的なgdbトリックは機能しますか? – chase
おそらく、Monitorコンストラクタが例外をキャッチし、内部的にランタイムを終了します...? – harto