0
我有一個簡單的python腳本,它使用了一個帶有的c/C++庫。我的C++庫也包含一個主要的方法,所以我可以在沒有-shared
標誌的情況下編譯它,並且它可以被執行並且運行沒有問題。但是,當我使用從python腳本運行相同的代碼時,部分C++程序被執行(我可以從cout
調用中知道)。然後整個應用程序,包括python腳本,termiantes(我可以告訴從失蹤的cout
和print
調用)。沒有錯誤信息,沒有段錯誤,沒有python stacktrace。如何在沒有錯誤信息的情況下調試ctypes
我的問題是:我該如何調試?這可能發生的原因是什麼?
這是代碼的一部分,但是,由於沒有錯誤消息,我不知道哪個代碼是相關的。
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
這解決了我的問題。問題是我正在使用一個指針數組而不是初始化它。當編譯爲一個可執行文件時,該數組以某種方式只包含nullpointers,我的代碼正確處理。 – Toast