您的位置:首页 > 编程语言 > Python开发

gdb 使用python源码调试

2017-07-12 10:57 369 查看
1) python的源码编译

./configure –with-pydebug –libdir=/usrl/lib –includedir=/usr/inlcude –enable-shared

sudo make altinstall

# 这个步骤不会把Python.h等都文件放入/usr/local/include下,用的话,需要指定到源码目录

# 坑,默认生成的makefile文件里是找不到tcl和tk库的,因为里面写死了找tcl8.5和tk8.5,我的电脑是8.6的。需要手动改makefile

#另外tcl和tk的库是安装在/usr/lib/tcl和/usr/lib/tk下的,需要更改makefile里-L的路径

2)CMakeList.txt

include文件重源码目录导入头文件

-I/home/test/Downloads/Python-2.7.12 导入pyconfig.h # 这个文件要在Python.h之前导入,否则找不到

-I/home/test/Downloads/Python-2.7.12 导入Python.h

Target_Link_Libraries( qna_inspect glib-2.0 pthread xml2 dl m crypto /home/test/Downloads/Python-2.7.12/libpython2.7.so ) # 连接到debug版本的so

3)用gdb python调式有问题,gdb load so的路径不是找系统的就是找不到,用了set solib-search-path和 set sysroot没有用,不够智能,应该是与源码结构位置对不上。最好是用c的执行程序直接gdb debug。所以这里用c的封装就ok了。

4) 提示/usr/lib/python2.7/_sysconfigdata.py中No module named _sysconfigdata_d,这个比较坑。网上说”sudo ln -s /usr/lib/python2.7/plat-*/_sysconfigdata_nd.py /usr/lib/python2.7/”就好了。结果没反应,后来发现是_sysconfigdata.py这个文件里会选择是用_d还是nd的文件。果断改成_nd.py就可以跑了。这时候就不要在意细节了。

断点函数:

DynamicFieldCallPythonFunction

PyObject_GetAttrString

_PyObject_GenericGetAttrWithDict

PyDict_GetItem
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: