在微控制器開發中,如keil或者iar,我們可以直接插上我們的jlink,很輕鬆的在開發環境上設定斷點,單步執行,檢視變數等除錯動作,所以就有好多從微控制器轉到linux上的使用者感覺很不習慣,上篇的番外對makefile的介紹也是由於這個原因,因為我們在整合開發環境中點一下編譯就可以了。完全把我們當傻子對待。因為我們每一次執行程式都不可能保證跟我們腦海裡面想的一模一樣,這時候我們就需要去除錯了。那麼什麼是的gdb呢?
gdb是gun發布的乙個很強大的程式除錯工具。主要可以幫助我們完成啟動被除錯的程式,讓程式在指定的位置停下來,當程式被停止時,可以檢視變數值的程式狀態。
我們通過下面的這個例子來快速上手gdb。快速關鍵字圈起來,要考~
第一步:
編譯我們的程式,輸入下圖命令:
其中 -g引數是在我們編譯的時候,會把除錯資訊加到可執行檔案中,如果不加-g引數,你就不能看見程式的變數名稱,函式名等。也就無法除錯。
第二步:
啟動gdb,輸入下圖命令:
啟動gdb,通過命令:gdb 完成。
第三步:
我們輸入命令list檢視程式,如下圖:
第四步:
我們在第12行打乙個斷點和在第15行打乙個條件斷點,打斷點的方式主要有以下幾種:
break 函式名 :在某個函式的入口處新增斷點
break 行號:在指定行新增斷點
break 檔名:行號 :在指定檔案的指定行新增斷點
break 行號 if 條件 :當條件為真時,指定行號的斷點生效。
第12行打乙個斷點,輸入下圖命令:
在第15行打乙個條件斷點,輸入下圖的命令:
檢視我們打的斷點,使用命令 info breakpoints,可以看見我剛才打的斷點
刪除斷點,使用命令delete 斷點編號來完成,由上圖可知,第12行的斷點編號為1,我們刪除在第12行打的斷點並檢視設定的斷點,輸入下圖命令:
第五步:
執行程式,輸入命令run,如下圖:
可見我們的程式在斷點處停了下來,因為我們這個是條件斷點,只有當i等於2的時候,斷點才生效,我們可以檢視下現在的i是不是等於2,輸入命令:print i,命令格式:print 變數名稱。檢視指定變數數值。
如下圖:
我們也可以對變數i進行監控,可以輸入命令 watch i,命令格式:watch 變數名稱。對指定變數進行監控。如下圖:
第六步:
單步執行程式,可以使用命令next和step。這倆個命令的區別如下:
next:單步執行程式,不進入子函式。
step:單步執行程式,進去子函式。
我們輸入命令next繼續往下執行:
可見我們的並沒有進去fun()這個子函式,我們輸入step看下效果。如下圖:
可以發現會進入到我們的fun()這個子函式。也可以使用命令finish退出函式,如下圖:
如果我們想繼續除錯呢,可以輸入命令continue
第7步:
退出除錯。可以使用命令quit
總結:
上圖中的命令也可以使用簡寫,如break可以簡寫成b,簡寫表如下:
gdb的命令很多,這裡不能全部羅列出來,我們可以通過help命令來列出gdb的命令種類,注意這裡是命令種類,可以使用help 種類來檢視,如 help breakpoints來檢視斷點的所有命令。
還有一點也很重要呢,我們可以也是用書tab按鍵來進行命令補全,這樣也可以少打幾個字元啦。
官方***:迅為開發板
gdb單步除錯c應用程式
0 報錯資訊 2019 12 28 14 59 34 023 kms server.c 0178 get the sign sigse 2019 12 28 14 59 34 023 kms server.c 0180 kms exit by signal 11 1 檢視程序號 imipay ips...
Emacs Lisp程式單步除錯
原址 emacs執行過程中有時候會報錯,這時我們需要對其進行debug 除錯 執行m x toggle debug on error開啟debug開關,這樣當emacs出錯的時候會進入debug模式。例如,我們有以下程式,這裡xyz是個未定義的函式 defun aborn debug demo de...
caffe使用gdb單步除錯及原始碼閱讀
目錄 一caffe單步除錯 二caffe入口函式 三初始化訓練網路 四前向傳播 五反向傳播 本文主要是介紹我在閱讀caffe過程中參考的順序以及 首先閱讀caffe看了知乎上面的這篇文章 深度學習caffe的 怎麼讀?參考的是gein chen 大神的回答 1.先讓程式跑起來,看看結果,這樣就會有直...