4

テストの例として、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 ++コードに入っていません。)

4

0 に答える 0