1. 程式人生 > >python 64式: 第17式、死鎖或程序hang住除錯方法

python 64式: 第17式、死鎖或程序hang住除錯方法

步驟1:下載python-debuginfo
如果已經發現有/etc/yum.repos.d/xxx-Debuginfo.repo,就不需要下載
修改
/etc/yum.repos.d/xxx-Debuginfo.repo
將其中的
enabled=0
修改為
enabled=1

步驟2:下載gdb
yum install gdb -y


步驟3: 下載debug資訊包
然後執行如下命令
yum install python-debuginfo -y
如果無法下載,就執行如下命令更新yum:。
yum makecache
然後再執行:
yum install python-debuginfo -y


步驟4: 連線到程序
gdb -p pid
pid是指程序號,可以通過 ps -ef 檢視,請替換為實際的程序號

步驟5: 列印資訊
py-bt
解釋: 檢視當前程序的堆疊資訊,這是很重要的命令,一般可以看到程序執行到哪裡發生死鎖或者卡住,進而可以回到python原始碼確定最終問題在哪裡

py-list
解釋: 顯示python程序當前程式碼執行到哪裡

py-locals
解釋: 顯示當前程序中的區域性變數

py-print
解釋: 列印python變數的值
用法: 例如
py-print self

info threads
thread <thread-num>
解釋: 先檢視執行緒資訊,然後切換執行緒想要檢視的執行緒



thread apply all py-list:
解釋:檢視所有程序執行位置

附:
另外一個可以連線到python程序的工具是pyrasite-shell,安裝命令為:
pip install pyrasite
用法:
pyrasite-sehll pid
解釋: pid是程序號。可通過ps -ef檢視

參考:
[1] https://devguide.python.org/gdb/
[2] https://www.jianshu.com/p/d150563f49a3
[3] https://pyrasite.readthedocs.io/en/latest/Shell.html