GDB調試

terminate called after throwing an instance of 'serialization::SerializationException' session

what():  error geometry typeANHUI 多線程

GDB是GNU開源組織發佈的一個強大的UNIX下的程序調試工具。 函數

通常來講,GDB主要幫忙你完成下面四個方面的功能: 工具

    一、啓動你的程序,能夠按照你的自定義的要求爲所欲爲的運行程序。
    二、可以讓被調試的程序在你所指定的調置的斷點處停住。(斷點能夠是條件表達式)
    三、當程序被停住時,能夠檢查此時你的程序中所發生的事。
    四、動態的改變你程序的執行環境。
優化

如何讓GDB保存歷史記錄

建立文件 ~/.gdbinit spa

填入如下內容: 線程

set history filename ~/.gdb_history 指針

set history save 調試

下次打開gdb,就能用向上箭頭找回上次session的命令啦! 進程

經常使用命令

$ gdb tst 開始對tst程序進行調試

(gdb)set args -->設置程序運行所需參數。

(gdb) show args --> 顯示已設置參數。

(gdb) break main.c : 16 --> 設置斷點,在源程序第16行處。

(gdb) break func --> 設置斷點,在函數func()入口處。

(gdb) break line if條件 --> 在第line行設置條件斷點。

(gdb) tb line --> 在第line行設置臨時break。

(gdb) info break --> 查看斷點信息。

(gdb) delete break 1 --> 刪除斷點1。

(gdb) r --> 運行程序,相關配置文件。

(gdb) c --> 繼續運行程序。

(gdb) l --> 查看源代碼。

(gdb) set listsize count -->設置顯示代碼行數。

(gdb) n --> 單條語句執行,next命令簡寫。

(gdb) 回車 --> 重複上條命令。

(gdb) u line --> 直接跳到line行

(gdb) step --> 進入函數。

(gdb) finish --> 退出函數。

(gdb) p i --> 打印變量i的值。

(gdb) bt --> 查看函數堆棧。

(gdb) info locals --> 查看堆棧中局部變量。

(gdb) q --> 退出gdb。

(gdb) ptype i -->查看變量i的類型聲明

(gdb)x/10xb mem -->查看mem指針開始的內存,10個byte,以16進制顯示。x/表示查看內存,10表示10個單元,b表示單元的單位爲byte,x表示16進制查看。其餘格式

格式: x /nfu <addr>
n表示要顯示的內存單元的個數
f表示顯示方式, 可取以下值
x 按十六進制格式顯示變量。
d 按十進制格式顯示變量。
u 按十進制格式顯示無符號整型。
o 按八進制格式顯示變量。
t 按二進制格式顯示變量。
a 按十六進制格式顯示變量。
i 指令地址格式
c 按字符格式顯示變量。
f 按浮點數格式顯示變量。
u表示一個地址單元的長度
b表示單字節,
h表示雙字節,
w表示四字節,
g表示八字節

經驗總結:

1) 編譯程序時要加-g,才能進行調試,例如gcc -g tst.c -o tst。上線時,COMAKE中要加入-g,這樣才能生成core文件。

2) 編譯程序時不能加-O2,不然優化後的程序在運行過程當中不按源代碼順序執行,不便於調試。但程序調試完畢後需從新加上-O2進行編譯,不然程序執行速度會下降2到3倍。

3) 調試正在運行的進程:gdb attach 進程號。獲取進程號命令:ps –ef|grep 程序名。

4) 多線程調試時,經過set scheduler-locking on來鎖定線程,便於在當前線程下進行調試。

5) 對core文件調試:gdb 程序名 core文件名。where命令查看程序崩潰時函數堆棧。

相關文章
相關標籤/搜索