(1)假設要debug的進程號為1000,運行如下命令:
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,安義企業(yè)網(wǎng)站建設,安義品牌網(wǎng)站建設,網(wǎng)站定制,安義網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,安義網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
$ 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查看。
根據(jù)這些可以查看系統(tǒng)調(diào)用的完整性,比如說服務器連接數(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)啟動時的引導消息,以及系統(tǒng)運行時的其他狀態(tài)消息。IO 錯誤、網(wǎng)絡錯誤和其他系統(tǒng)錯誤都會記錄到這個文件中。其他信息,比如某個人的身份切換為 root,也在這里列出。如果服務正在運行,比如 DHCP 服務器,您可以在 messages 文件中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要查看的文件。
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)容,比如二進制文件中包含的某些字符串,通常用來調(diào)試驅(qū)動用
描述
我們以event1為例,當我們insmod掛載了鍵盤驅(qū)動后,出現(xiàn)一個event1設備,
此時沒有按鍵按下,所以event1里面的數(shù)據(jù)是沒有的,那么數(shù)據(jù)又是從來哪里來?
通過鍵盤驅(qū)動的read函數(shù),若有按鍵按下,就會上傳按鍵數(shù)據(jù)給用戶層hexdump
因為鍵盤驅(qū)動的input_handler 是:evdev_handler
所以鍵盤驅(qū)動的read函數(shù)是: evdev_handler-evdev_fops-evdev_read
進入evdev_read()函數(shù),如下圖所示:
evdev_event_to_user()這個函數(shù)從字面上來看,顯然就是用來上傳給用戶層的函數(shù),其中buffer是函數(shù)參數(shù),指向用戶層,所以數(shù)據(jù)就是event.
我們來看看event的結(jié)構(gòu)體:input_event
把 time里的成員展開如下:
所以我們hexdump調(diào)試任何輸入子系統(tǒng)event XX驅(qū)動時,有信息就會打印上面數(shù)據(jù)
1.調(diào)試鍵盤驅(qū)動
以按開發(fā)板的按鍵 KEY_L,為例(因為數(shù)據(jù)是從低到高打印的,所以數(shù)據(jù)是反的):