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
./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
相关文章推荐
- 使用hello-gl2建立ndk-gdb环境(有源码和无源码调试环境)
- nginx源码分析--使用GDB调试
- caffe使用gdb单步调试及源码阅读
- 在kali下使用gdb以源码方式调试glibc
- Android无源码调试Native代码(使用GDB)
- 在 Python 中使用 GDB 来调试 转载
- 在 Python 中使用 GDB 来调试 转载
- nginx模块_使用gdb调试nginx源码
- nginx源码分析--使用GDB调试(strace、 pstack )
- 在 Python 中使用 GDB 来调试 转载
- 使用gdb调试python脚本
- nginx源码分析--使用GDB调试
- 使用gdb调试nginx源码
- 使用gdb调试Python进程
- nginx模块_使用gdb调试nginx源码
- 使用gdb调试python
- Android无源码调试Native代码(使用GDB)
- nginx模块_使用gdb调试nginx源码
- nginx源码分析--使用GDB调试(strace、 pstack )
- Android无源码调试Native代码(使用GDB)