./configure --host=i586-mingw32msvc --target=arm-linux-gnueabihf --with-libexpat-prefix=/home/cdu/gdb-arm/expat-2.1.0-1 --without-libunwind-ia64 --without-libunwind-ia64 --without-lzma --with-python=/home/cdu/gdb-arm/python-2.7.4-mingw32 --without-guile --without-babeltrace --with-sysroot=/opt/sysroot-arm
然后就可以:make
make DESTDIR=... install
1.安装gdb 最好是gdb7.7版本2.获取python源代码
3.编译python
* ./configure --prefix=/home/admin/python
* make "CFLAGS=-g -fno-inline -fno-strict-aliasing"
* make install
4.复制python源代码中的Tools//gdb/libpython.py到目录 ~/.gdbinit
5.修改.gdbinit中的代码
<<<<if $pc >PyEval_EvalFrameEx &&$pc <PyEval_EvalCodeEx
修改为
>>>>if $pc >PyEval_EvalFrameEx &&$pc <PyEval_EvalCodeEx &&$fp != 0
6.启动gdb ./gdb python
可用命令有 ./gdb python --pid=${pid}
./gdb python --core=${core_file}
7.引入libpython.py
(gdb) python
>import sys
>sys.path.insert(0,'/home/admin/')
>import libpython
>end
(gdb)
8.然后可运行命令py-bt,py-list,pystack,pystackv
注:
1.libpython.py为python debug扩展
2.gdbinit中包含扩展命令,pystack即在这里边定义
3.若运行pystack时出现错误 No symbol "co" in current context.
则表示未执行以下两个步骤:
make "CFLAGS=-g -fno-inline -fno-strict-aliasing"
修改.gdbinit中的代码(修改内容见上边的步骤5)
1)确保gdb版本>=7.02)安装python-debuginfo包。
如:python-debuginfo-2.6.6-29.el6_2.2.x86_64.rpm,这个版本号一定要跟你所用的python版本一致(可以rpm -qa|grep python查看你安装的python的详细版本号)。
Centos下找包地址为:http://debuginfo.centos.org/6/x86_64/。
3)就可以运行命令
#gdb python pid
进行调试。
linux下gdb如何调试python程序
(1)假设要debug的进程号为1000,运行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到进程。
(2)载入libpython脚本
如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此脚本是扩展gdb的,不是我们需要debug的脚本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安装的是GNU的gdb,就需要打开gdb后手动载入libpython.py脚本
(gdb) python
>import sys
>sys.path.insert(0, '/path/to/libpython.py' )
>import libpython
>end
(gdb)
这时就可以使用py-bt命令打印当前线程的Python traceback了。libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。