- 1、GDB如何查找指針我要在GDB里導入Python腳
- 2、如何使用linux下gdb來調試python程序
- 3、如何使用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查看。
Linux下使用pdb簡單調試python程序
python自帶調試工具庫:pdb
# -*- coding:utf-8 -*-
def func(num):
s = num * 10
return s
if __name__ == ‘__main__’:
print ‘debug starting…’
print ‘*’ * 10
print ‘debug ending…’
num = 100
s = func(num)
print s
在python文件中不引用pdb庫,可以在執行python文件的時候,加上參數:
python -m pdb demo.py
來到pdb調試交互界面,debug模式將會停止在的第一行程序代碼行
可以執行如下命令,進行相應的操作:
b(or break):設置斷點;設置函數:b demo.func;設置行數:b demo:14(行數)
n(or next):執行下一行:
Step over,跳過
c(or continue):執行下一個斷點,沒有斷點則到程序結束:Step filter
s(or step):進入函數,
Step into,單步跳入
r(or return):跳出函數,Step return
l(or list):查看當前代碼段
q(or quit):退出當前debug
p(or print):列印變數值
h(or help):查看幫助
cl(clear):清除所有節點
disable [bpnumber[bpnumber]]:將第num個斷點失效,enable,失效第10個斷點
enable [bpnumber[bpnumber]]:啟用第num個斷點,enable 10,啟用第10個斷點
w(where):列印堆棧信息
a(args):列印當前函數參數信息
當然我們也可以使用pdb庫的函數,來實現對py的debug:
比如:我們可以使用pdb函數:set_trace()
def func(num):
s = num * 10
return s
if __name__ == ‘__main__’:
print ‘debug starting…’
print ‘*’ * 10
pdb.set_trace()
print ‘debug ending…’
num = 100
s = func(num)
print s
執行程序:python pdb_demo.py
此時意味著給程序設置斷點行,將會自動運行至print 『py ending…』停住,讓開發者繼續觸發接下來的操作,該操作在一個py引用其他py的時候,設置斷點恰到好處。
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)
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126165.html