約定:$開始的行為shell下的命令
在linux中可以中可以通過:
$ gdb file_name --core=core.222
注意:
這裡的`file_name`是一個可執行文件比如:`/usr/local/rss/bin/nms_monitor`
然後使用`where` 或者`bt`或者`info stack` 或者`backtrace` 即可看到調用堆棧;
`frame n` 查看具體的那個調用堆棧` up (down)`進行前進或者後退
在其他機器上可以使用
$ pstack core.22
gdb在某個文件設定斷點
(gdb) b test.cpp:2234
2234為需要設置斷點的行數
(gdb)b test.cpp:snmp_modify_table
在test.cpp文件的snmp_modify_table函數入口處設置斷點
在類成員函數設置斷點:
(gdb) b A::print_log
如果不知道類成員可以通過以下方法查看類成員:
(gdb)b A::
gdb查看斷點情況:
(gdb)info break
取消斷點dis + 斷點編號
(gdb)dis 1
查看類的某個成員:(前面是字母L)
(gdb)l A::print_log
回車繼續翻頁
打印當前變量值
(gdb)print 變量名
查看函數調用棧,函數調用情況
(gdb) bt
查看進程內存映像
(gdb)info proc mappings
查看進程鏡像中heap的內容 :
(gdb)set height 0 #設置高位為0,打印日誌時可以持續輸出
(gdb)set logging on #打開日誌
(gdb)x/10a 0x0009123
輸入的日誌在gdb.txt 可以結合c++filt 分析heap中的內容,如果類對象有虛函數,那麼new的對象如果沒有free掉將會在heap中保留,根據該特點可以用於分析內存洩漏。
閱讀更多 後臺開發深度探索 的文章