常見GDB除錯命令

2021-09-26 22:55:14 字數 2475 閱讀 6708

pmap 列印命令格式

1、std::maptest_map

pmap test_map in tint

2、class *test_class;

std::maptest_map

pmap test_map int 即可,

pmap test_map int *test_class列印好像會有問題

pvector、plist、pstring

3、b svrsessioncore.cpp:1515對1515行斷掉除錯

設定條件斷點b 17 if i == 8.

17行設定乙個斷點

,並且只有

i==8

的時候才會觸發.

4、b dahua::netframwork::cnethandle::unregister

對某個函式進行斷掉除錯

5、r開始執行

6、c遇到斷點,繼續執行

8、f 4當前堆疊的第四層

9、gdb attach pid 進行執行狀態的程式進行除錯,進入之後執行c,gdb –p pid這種方式進入的好像不需要執行任何命令

10、info symbol *0xf5638c70

11、p *(dahua::streammedia::crtpdatasrc*)0xf5638c70

12、s(step)進入函式體,類似於windows的f11

13、finish退出函式體,類似於windows的f10

14、gdb attach pid,然後執行generate-core-file,手動產生core檔案

15、set print pretty可以將列印資訊格式化,這樣p this的時候看到的資訊更為方便

16、x命令檢視記憶體資訊

x/100c 0xa61aea00-100檢視0xa61aea00位址前面100個位元組的字元資訊,100c表示檢視100個位元組的記憶體資訊,c表示按照字元形式列印出來

x/64x addr 表示列印addr位址記憶體內容

,每次列印64個,16進製制形式列印

x/64s 0xf5638c70以字元形式列印64個字元

17、x/100x 0xf5638c70以16進製制列印100個字元,16、17經常列印前面位址資訊,直接在位址前面加減即可,如x/100x 0xf5638c70-100,表示列印前面乙個0xf5638c70位址前面100個位元組的內容

18、set logging file mts.txt設定除錯資訊日誌生成檔名,不這麼操作的話,預設gdb.txt

set logging on開啟日誌                                        

…//執行命令

set logging off//關閉日誌

19、info sharedlibrary檢視動態庫的除錯資訊載入情況,如果有

*號,表示動態庫載入失敗? 20

、gdb –p pid

進去之後,執行

call

malloc_trim(0)

,清快取 21

、disassemble

反彙編

22、檢視當前斷點資訊info b

delete 刪除當前所有的斷點

delete 5刪除序列號為5的斷點,通過上面info b可以知道當前斷點資訊

disable 5使斷點5失效

enable 5使斷點5重新生效

23、r開啟,

c遇到斷點調過之後繼續執行

s進入函式內部

finish跳出函式堆疊

24、info args 列印當前函式名和函式引數

info locals列印區域性變數資訊

25、gdb attach pid進入執行的程式當中,然後執行generate-core-file生成core檔案,實際直接執行gcore pid就好了,程式還不會掛掉(kill -6 pid生成core會掛掉)

26、set print elements 0在列印長字串的時候,gdb預設是列印200個字元,如果字串超過了200,就會顯示…通過這個命令可以設定成列印無限長度的字串

27、在gdb除錯狀態下,輸入shell之後,可以和linux環境一樣,執行各種命令,比如上面的shell pmap pid28、watch

watch :為表示式(變數)expr設定乙個觀察點。一旦表示式值有變化時,馬上停住程式。

rwatch :當表示式(變數)expr被讀時,停住程式。

awatch :當表示式(變數)的值被讀或被寫時,停住程式。

info watchpoints:列出當前所設定了的所有觀察點。(csdn部落格上有專門的介紹,對於定位踩記憶體有一定的用處)

29、call +函式名,強制程式執行函式,比如執行call malloc_trim(0),釋放應用的快取空間

30、碰到過乙個棧溢位崩潰問題,這種情況下堆疊有20000+棧幀,這種情況下,bt的話,基本無法檢視,輸入命令bt -20表示方向檢視最開始20幀,bt 20順向檢視20幀堆疊

gdb除錯命令

一 gdb常用命令簡介 rrun 執行.程式還沒有執行前使用 c cuntinue 執行到下一斷點處 qquit 退出tab tab命令補全功能 h help幫助s step 跟入函式 nnext 執行下一行的 如果是函式呼叫,也當作一行 執行到此函式返回 b breakpoint 設定斷點,用法 ...

GDB除錯命令

gdb的命令很多,本文不會全部介紹,僅會介紹一些最常用的。在介紹之前,先介紹gdb中的乙個非常有用的功能 補齊功能。它就如同linux下 shell中的命令補齊一樣。當你輸入乙個命令的前幾個字元,然後輸入tab鍵,如果沒有其它命令的前幾個字元與此相同,shell將補齊此命令。如果有 其它命令的前幾個...

GDB除錯命令

用gdb除錯程式 gdb概述 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...