天天看點

python和C++聯合調試

    python可以利用SO的方式去調用C++中的函數,但是需要一種調試方案來進行python和C++的聯合調試,效果是直接在c++代碼中打斷點,然後python在進行c++so調用的時候,直接進入到斷點處:

testlib.cpp

call_cpp.py

setup.py

将setup.py和testlib.cpp放到同一個目錄下,執行python setup.py install

python和C++聯合調試

可以看到CFuncEntry.so已經生成,這時執行gdb –args python-dbg call_cpp.py可以進入到gdb調試模式:

python和C++聯合調試
python和C++聯合調試
可能的問題:

1. python-dbg有可能沒有安裝,需要執行sudo apt-get install python-dbg進行安裝;

2. 直接使用g++ -o CFuncEntry.so testlib.cpp -g -shared -fpic -DEBUG -lpython2.7_d 的方式生成的so會出現如下錯誤:

undefined symbol: Py_InitModule4_64

3. 直接用g++進行編譯,生成so,需要加上Py_DEBUG參數:g++ -o CFuncEntry.so testlib.cpp -g -shared -fpic -DEBUG -lpython2.7_d -DPy_DEBUG

python和C++聯合調試

參考資料:

1. http://hustoknow.blogspot.com/2013/06/why-your-python-program-cant-start-when.html

2. https://blog.csdn.net/mydear_11000/article/details/52252363