linux C GDB 調試技巧

約定:$開始的行為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中保留,根據該特點可以用於分析內存洩漏。


分享到:


相關文章: