2016-09-25 119 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

相关问题