テストの例として、boost を使用して Python にエクスポートしたこのテスト C++ クラスがあります (boost の Web サイトから)。
#include <boost/python.hpp>
using namespace boost::python;
struct WorldC
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<WorldC>("WorldP")
.def("greet", &WorldC::greet)
.def("set", &WorldC::set)
;
}
このコードをコンパイルしてg++ -g -shared -o hello.so -fPIC hello.cpp -lboost_python -lpython2.7 -I/usr/local/include/python2.7
、問題なくテストしました。テスト スクリプトpp1.py
は次のようになります。
import hello
a = hello.WorldP()
a.set('ahahahah') # <-- line 3
print a.greet()
print('print1')
b = hello.WorldP()
b.set('bhbhbhbh')
print b.greet()
print('print2')
print('program done')
このコードは、対話モードでもスクリプトとしても正常に実行されます。
ckim@stph45:~/python/hello] python pp1.py
ahahahah
print1
bhbhbhbh
print2
program done
ビジュアル デバッグに DDD を使用しています。コマンドddd -pydb pp1.py
を実行すると、Python コードのデバッグを実行できます。デバッガー内にいるときは、next
コマンドを実行して結果を確認できます。しかし、デバッガーがたとえば 3 行目にある場合、step
コマンドを実行すると、C++ コードに入らない行を渡すだけです。どうすればこれを機能させることができますか?(私はgdbだけで試しましたが、同じです.c ++コードに入っていません。)