strace
命令基本沒怎麼用過呢,soft lookup也沒有聽過node
復現以後架構
找不出緣由函數
這部份內容讓我想到了,吳軍說的 專業和業餘的區別。
啓用內核轉儲命令行
ulimit -c unlimted
gdb -c core.* ./a.out
//core文件 進程gdb l 5
--這個能夠看到文件的第幾行?在調試core的時候? 在專用目錄中生成內核轉儲調試
cat /etc/sysctl.conf
修改kernel.core_pattern的值sysctrl -p
code
使用用戶模式輔助程序自助壓縮內核轉儲文件對象
exec gzip ->
啓用整個系統的內核轉儲功能進程
準備ip
gcc -Wall -02 -g 源文件
CFLAGS = -Wall -02 -g
./configure CFLAGS="-Wall -02 -g"
啓動內存
$gdb 可執行文件名
設置斷點
b file.c :110
// 經過指定文件名和行號,我第一次用時,不知道
b
後面啥也不加,就會在下一行設置斷點 info break
用於查看設置好的斷點運行
run
能夠簡寫成r
,而後加參數start
命令也能夠? 我也用得極少 顯示棧幀
backtrace
簡寫bt
,別名還有where
和info stack
簡寫成info s
bt N
只顯示開頭N個幀;bt -N
只顯示最後N個的幀;bt full 3
從外向內顯示3個棧幀,及其局部變量。 這個就沒用過 顯示變量
p 變量
顯示寄存器
info registers
簡稱info reg
p/格式 變量
單步執行
next
即n
step
即s
,進入函數內部。書中寫錯了 nexti
或stepi
逐條執行彙編指令繼續運行
continue
簡寫爲c
c 5
表示5次遇到斷點不中止,第6次遇到斷點時才暫停執行。監視點
watch <表達式>
這個使用得比較少 刪除斷點和監視點
delete <編號>
即d 2
或者d 2-10
改變變量的值
set variable <變量>=<表達式>
這個在我項目中,是有想過,但沒找到解決方案 生成內核轉儲文件
generate-core-file
gcore
命令能夠直接從命令行直接生成內核轉儲文件。attach到進程
attach pid
上回看人家調試的時候,就用了attach這個命令 detach
命令,這樣進程能夠繼續運行info proc
顯示進程信息條件斷點
break 斷點 if 條件
,舉例b iseq_compile if node==0
condition 斷點編號
反覆執行
ignore 斷點編號 次數
刪除斷點和禁用斷點
clear
刪除已定義的斷點disable
臨時禁用;enable
斷點從新啓用disable display 顯示編號
disable mem 內存區域
斷點命令
commads
能夠定義在斷點中斷後自動執行的命令。經常使用命令及省略形式(別名)
x
顯示內存內容info
顯示調試對象的各類各樣的信息list
顯示函數或行show
顯示GDB內部的功能、變量和選項值的歷史
p $
來訪問show value
能夠顯示歷史中的最後10個值。變量
set $i=0
,隨意定義變量; p $i
命令歷史
show history
,命令歷史文件們於./.gdb_history