私はでc/C++ライブラリを使用する単純なpythonスクリプトを持っています。私のC++ライブラリにもmainメソッドが含まれているので、-shared
フラグを付けずにコンパイルすることができます。これを実行すると問題なく実行できます。エラーメッセージなしでctypesをデバッグする方法
しかし、を使用しているPythonスクリプトから同じコードを実行すると、C++プログラムの一部が実行されます(これはcout
呼び出しからわかります)。その後、pythonスクリプト、termiantesを含むアプリケーション全体(私は逃したcout
とprint
呼び出しからそれを伝えることができます)。 segfault、no python stacktraceというエラーメッセージはありません。
私の質問は:これをどのようにデバッグできますか?これが起こる可能性のある理由は何ですか?
ここではコードの一部ですが、エラーメッセージが表示されないため、関連するコードはわかりません。
import ctypes
interface = ctypes.CDLL("apprunner.so")
interface.start()
print "complete"
。
#include "../../app/ShaderApp.cpp"
#include <iostream>
#include "TestApp.cpp"
TestApp* app = 0;
extern "C" void start() {
app = new TestApp();
cout << "Running from library" << endl;
app->run();
}
int main(int argc, const char* argv[]) {
cout << "Running from excecutable" << endl;
start();
}
私はそれを行いました。失敗した場所は特別なことをしません(forループ)。また、同じコードはctypesから呼び出されていないときに機能します。 – Toast
良いそれでは、デバッガ(gdbなど)を使う時が来ました。 C++関数にブレークポイントを設定します。残念ながら、デバッガの使用は容易ではありません。 – ddbug
これは私の問題を解決しました。問題は、私はポインタの配列を使用していて、それを初期化していないということでした。 excecutableとしてコンパイルすると、配列には何らかの形でnullpointersしか含まれていませんでした。これは私のコードが正しく処理したものです。 – Toast