(1)假設(shè)要debug的進(jìn)程號為1000,運(yùn)行如下命令:
站在用戶的角度思考問題,與客戶深入溝通,找到南岔網(wǎng)站設(shè)計(jì)與南岔網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋南岔地區(qū)。
$ gdb -p 1000
使用此命令即可使gdb附加到進(jìn)程。
(2)載入libpython腳本
如果你的gdb是redhat或fedora等廠商修改過的,會(huì)有--python選項(xiàng),使用此選項(xiàng)即可指定gdb啟動(dòng)時(shí)載入的Python擴(kuò)展腳本(此腳本是擴(kuò)展gdb的,不是我們需要debug的腳本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安裝的是GNU的gdb,就需要打開gdb后手動(dòng)載入libpython.py腳本
(gdb) python
import sys
sys.path.insert(0, '/path/to/libpython.py' )
import libpython
end
(gdb)
這時(shí)就可以使用py-bt命令打印當(dāng)前線程的Python traceback了。libpython還提供很多命令,例如py-print打印變量,py-locals打印所有本地變量等等,詳細(xì)可打開libpython.py查看。
根據(jù)這些可以查看系統(tǒng)調(diào)用的完整性,比如說服務(wù)器連接數(shù)一直漲,說明fd沒有close,close調(diào)用在上邊有缺失
strace -t -T -v -f -p 16705 -Te write 只看write系統(tǒng)調(diào)用
sudo gcore xxpid 生成dump文件
sudo dlv core binfile core.xxxx 調(diào)試coredump文件,查看調(diào)用棧、goroutines
查看系統(tǒng)級別日志 /var/log/messages
messages 日志是核心系統(tǒng)日志文件。它包含了系統(tǒng)啟動(dòng)時(shí)的引導(dǎo)消息,以及系統(tǒng)運(yùn)行時(shí)的其他狀態(tài)消息。IO 錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤和其他系統(tǒng)錯(cuò)誤都會(huì)記錄到這個(gè)文件中。其他信息,比如某個(gè)人的身份切換為 root,也在這里列出。如果服務(wù)正在運(yùn)行,比如 DHCP 服務(wù)器,您可以在 messages 文件中觀察它的活動(dòng)。通常,/var/log/messages 是您在做故障診斷時(shí)首先要查看的文件。
tcpdump -i lo -nnA 'port 7076' and 'tcp[13] 4 != 0 ' 抓rst包,發(fā)送給7076端口或者是7076端口發(fā)出去的
mac osx系統(tǒng):sudo tcpdump -i lo0 -nnA 'port 3000'
hexdump: 查看文件的內(nèi)容,比如二進(jìn)制文件中包含的某些字符串,通常用來調(diào)試驅(qū)動(dòng)用
描述
我們以event1為例,當(dāng)我們insmod掛載了鍵盤驅(qū)動(dòng)后,出現(xiàn)一個(gè)event1設(shè)備,
此時(shí)沒有按鍵按下,所以event1里面的數(shù)據(jù)是沒有的,那么數(shù)據(jù)又是從來哪里來?
通過鍵盤驅(qū)動(dòng)的read函數(shù),若有按鍵按下,就會(huì)上傳按鍵數(shù)據(jù)給用戶層hexdump
因?yàn)殒I盤驅(qū)動(dòng)的input_handler 是:evdev_handler
所以鍵盤驅(qū)動(dòng)的read函數(shù)是: evdev_handler-evdev_fops-evdev_read
進(jìn)入evdev_read()函數(shù),如下圖所示:
evdev_event_to_user()這個(gè)函數(shù)從字面上來看,顯然就是用來上傳給用戶層的函數(shù),其中buffer是函數(shù)參數(shù),指向用戶層,所以數(shù)據(jù)就是event.
我們來看看event的結(jié)構(gòu)體:input_event
把 time里的成員展開如下:
所以我們hexdump調(diào)試任何輸入子系統(tǒng)event XX驅(qū)動(dòng)時(shí),有信息就會(huì)打印上面數(shù)據(jù)
1.調(diào)試鍵盤驅(qū)動(dòng)
以按開發(fā)板的按鍵 KEY_L,為例(因?yàn)閿?shù)據(jù)是從低到高打印的,所以數(shù)據(jù)是反的):
方法:
_hell提供了一些用于調(diào)試腳本的選項(xiàng),如:
?1.-n :讀一遍腳本中的命令但不執(zhí)行,用于檢查腳本中的語法錯(cuò)誤。
?2.-v :一邊執(zhí)行腳本,一邊將執(zhí)行過的腳本命令打印到標(biāo)準(zhǔn)錯(cuò)誤輸出。
?3.-x :提供跟蹤執(zhí)行信息,將執(zhí)行的每一條命令和結(jié)果依次打印出來。該選項(xiàng)有三種常見的使用方法:
?1.在命令行提供參數(shù)。如:itcast@itcast$ sh -x ./script.sh
?2.在腳本開頭提供參數(shù)。如:#! /bin/sh -x
_誚瘧局杏_et命令啟用或禁用參數(shù)。如:set -x 和 set +x分別表示啟用和禁用-x參數(shù),這樣可以只對腳本中的某一段進(jìn)行跟蹤調(diào)試。