2016-09-25 125 views
0

我有一個簡單的python腳本,它使用了一個帶有​​的c/C++庫。我的C++庫也包含一個主要的方法,所以我可以在沒有-shared標誌的情況下編譯它,並且它可以被執行並且運行沒有問題。但是,當我使用​​從python腳本運行相同的代碼時,部分C++程序被執行(我可以從cout調用中知道)。然後整個應用程序,包括python腳本,termiantes(我可以告訴從失蹤的coutprint調用)。沒有錯誤信息,沒有段錯誤,沒有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(); 
} 

回答

0

通常,您從一個小型模型庫開始,它只是讓您測試來自python的函數調用。準備就緒時(所有的調試打印都可以),您繼續下一步。在你的例子中,註釋掉#include「testapp.cpp」並獲得打印到cout的工作。

+0

我做到了,失敗的地方並沒有做任何特別的事情(只是一個for循環)。另外,當它不從ctypes調用時,相同的代碼也可以工作。 – Toast

+0

好。那麼是時候使用一個調試器(例如gdb)。在C++函數中設置一個斷點。不幸的是,使用調試器並不容易。 – ddbug

+1

這解決了我的問題。問題是我正在使用一個指針數組而不是初始化它。當編譯爲一個可執行文件時,該數組以某種方式只包含nullpointers,我的代碼正確處理。 – Toast

相關問題