如何在没有错误消息的情况下调试 ctypes
How to debug ctypes without error message
我有一个简单的 python 脚本,它使用 c/c++ 库和 ctypes
。我的 C++ 库还包含一个主要方法,所以我可以在没有 -shared
标志的情况下编译它,它可以被执行并且它 运行s 没有问题。
然而,当我 运行 使用 ctypes
来自 python 脚本的相同代码时,c++ 程序的一部分被执行(我可以从 cout
调用)。然后是整个应用程序,包括 python 脚本,termiantes(我可以从缺少的 cout
和 print
调用中看出这一点)。没有错误消息,没有段错误,没有 python 堆栈跟踪。
我的问题是:我该如何调试它?发生这种情况的可能原因是什么?
这是部分代码,但是,由于没有错误信息,我不知道哪个代码是相关的。
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();
}
通常,您从一个小型模型库开始,该库仅允许您测试来自 python 的函数调用。准备就绪后(所有调试打印都正常),您可以继续进行。在您的示例中,注释掉 #include "testapp.cpp" 并让打印件正常工作。
我有一个简单的 python 脚本,它使用 c/c++ 库和 ctypes
。我的 C++ 库还包含一个主要方法,所以我可以在没有 -shared
标志的情况下编译它,它可以被执行并且它 运行s 没有问题。
然而,当我 运行 使用 ctypes
来自 python 脚本的相同代码时,c++ 程序的一部分被执行(我可以从 cout
调用)。然后是整个应用程序,包括 python 脚本,termiantes(我可以从缺少的 cout
和 print
调用中看出这一点)。没有错误消息,没有段错误,没有 python 堆栈跟踪。
我的问题是:我该如何调试它?发生这种情况的可能原因是什么?
这是部分代码,但是,由于没有错误信息,我不知道哪个代码是相关的。
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();
}
通常,您从一个小型模型库开始,该库仅允许您测试来自 python 的函数调用。准备就绪后(所有调试打印都正常),您可以继续进行。在您的示例中,注释掉 #include "testapp.cpp" 并让打印件正常工作。