一、概述
二、准備
1. 確認你的gdb版本是>=7,gdb從版本7開始支持對Python的debug。
2.確認gdb連接的Python是所要debug的Python,否則請重新編譯gdb。
1 $ gdb 2 (gdb) python 3 > import sys 4 >print sys.version 5 >end 6 2.4.3 ( #1, Sep 21 2011, 19:55:41) 7 [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)]
編譯時注意,要把自己編譯的Python路徑加到PATH環境變量里,這樣gdb configure的時候才會找到新版Python並連接。
3.下載libpython.py
三、開始debug
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了
3、libpython還提供很多命令,例如py-print打印變量,py-locals打印所有本地變量等等,詳細可打開libpython.py查看。
一點經驗
- 在gdb可以使用generate-core-file命令生成一個coredump文件。之后可以用gdb –core來打開coredump文件進行debug。避免一直attach住進程,可以快速重啟恢復服務
- gdb-heap是gdb的一個擴展。可以打印Python的內存使用情況