嵌入式開發(fā) - GDB串口遠程調(diào)試

1. 準備調(diào)試串口

目標板一般只有一個串口用于控制臺輸入輸出咕宿,串口遠程調(diào)試需要第二個串口笆制。下面假設這個串口設備是/dev/ttyS2叫搁。同時假設宿主機上的串口設備是/dev/ttyS1匈仗。

  • 檢查串口連通性。在宿主機上執(zhí)行:
$ cat /dev/ttyS1

在板上執(zhí)行:

$ echo hello > /dev/ttyS2

這時宿主機上應收到hello悍手。如果收到證明宿主機RX方向沒有問題帘睦。

類似地,反過來檢查確認宿主機TX方向沒有問題坦康。

  • 如果宿主機上的Linux不是直接裝在本機上竣付,而是Windows上的虛擬機(如VMware),則虛擬機需要添加串口涝焙。VWware的設置方法如下圖:

一般串口1的設備號是/dev/ttyS0卑笨,串口2的設備號是/dev/ttyS1 ... 可以用前面的方法驗證連通性。

2. 檢查 gdb + gdbserver

  • 軟件布局

這里的設置影響動態(tài)庫符號的加載仑撞。假設你的軟件包mypkg.tar.gz的布局如下:

mypkg/lib
mypkg/bin

在板上安裝在/opt目錄下:

/opt/mypkg

在宿主機上解壓在/home/ronzheng下

/home/ronzheng/opt/mypkg
  • 連接gdbserver

在板上運行如下命令赤兴,gdbserver應當顯示進程啟動信息。為了顯示后來的連接信息隧哮,這里打開了選項
--remote-debug桶良。

$ cd /opt/mypkg/bin
$ gdbserver --remote-debug /dev/ttyS2 myapp
Process myapp created; pid = 23466
Remote debugging using /dev/ttyS2

在宿主機上運行如下命令,gdb應當從本地加載符號信息沮翔。其中9600是/dev/ttyS1的波特率陨帆。

$ cd /home/ronzheng
$ arm-linux-gnueabi-gdb -b 9600 opt/pos/bin/myapp
...
Reading symbols from extp/pos/bin/msghub...done.

繼續(xù)設置sysroot,以便找到動態(tài)庫的符號信息:

(gdb) set sysroot /home/aronzheng

在main()設置斷點:

(gdb) b main

連接串口target采蚀,這時板上的gdbserver應該打印一系列連接信息疲牵。

(gdb) target remote /dev/ttyS1
Remote debugging using /dev/ttyS1
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0xb6fd7a00 in ?? ()

運行continue,這時gdb應該停在main()函數(shù)上榆鼠。

(gdb) continue
warning: Could not load shared library symbols for 10 libraries, e.g. /lib/librt.so.1.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?

Breakpoint 1, main (argc=1, argv=0xbefffd74) at /home/ronzheng/dev/mypkg/apps/myapp/src/MyApp.cpp:10

這時就可以開始調(diào)試了纲爸。

也可以用info sharedlib檢查動態(tài)庫的符號加載情況。

(gdb) info sharedlib
From        To          Syms Read   Shared Object Library
0xb6fc5b1c  0xb6fc6180  Yes         /home/ronzheng/opt/pos/lib/libappfrm.so
0xb6fb06c0  0xb6fb340c  Yes         /home/ronzheng/opt/pos/lib/libmsgend.so
                        No          /lib/librt.so.1
                        No          /lib/libdl.so.2
0xb6f7300c  0xb6f73ad0  Yes         /home/ronzheng/opt/pos/lib/libtlog.so
0xb6f1ba50  0xb6f5957c  Yes         /home/ronzheng/opt/pos/lib/libnanomsg.so.5.1.0
                        No          /lib/libstdc++.so.6
                        No          /lib/libm.so.6
                        No          /lib/libgcc_s.so.1
                        No          /lib/libpthread.so.0
                        No          /lib/libc.so.6
                        No          /lib/ld-linux.so.3
                        No          /usr/lib/extra/libanl.so.1
                        No          /lib/libnsl.so.1
  • 切換root用戶

連接串口target時妆够,可能出現(xiàn)權(quán)限不夠的情況:

(gdb) target remote /dev/ttyS1
/dev/ttyS1: Permission denied.

這時需要先切換到root用戶:

$ sudo passwd root
$ su

3. 正式調(diào)試

去掉gdbserver的--remote-debug選項识啦,重新開始調(diào)試。

$ gdbserver /dev/ttyS2 myapp

相關(guān)鏈接

GDB 常用法
GDB 調(diào)試Coredump問題
嵌入式開發(fā)中GDB調(diào)試Coredump問題
嵌入式開發(fā)中GDB串口遠程調(diào)試
用backtrace()調(diào)試coredump問題
Valgrind memcheck 用法
Address Sanitizer 用法

參考資料

arm-linux-gdb + gdbserver雙串口目標機調(diào)試心得
http://blog.sina.com.cn/s/blog_48ca560d0100ej6t.html

ubuntu怎么切換到root用戶,切換到root賬號方法
https://jingyan.baidu.com/article/fd8044fa1e74035031137ae0.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末神妹,一起剝皮案震驚了整個濱河市颓哮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸵荠,老刑警劉巖冕茅,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛹找,居然都是意外死亡嵌赠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門熄赡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姜挺,“玉大人,你說我怎么就攤上這事彼硫〈逗溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵拧篮,是天一觀的道長词渤。 經(jīng)常有香客問我,道長串绩,這世上最難降的妖魔是什么缺虐? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮礁凡,結(jié)果婚禮上高氮,老公的妹妹穿的比我還像新娘慧妄。我一直安慰自己,他們只是感情好剪芍,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布塞淹。 她就那樣靜靜地躺著,像睡著了一般罪裹。 火紅的嫁衣襯著肌膚如雪饱普。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天状共,我揣著相機與錄音套耕,去河邊找鬼。 笑死峡继,一個胖子當著我的面吹牛冯袍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鬓椭,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颠猴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了小染?” 一聲冷哼從身側(cè)響起翘瓮,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裤翩,沒想到半個月后资盅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡踊赠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年呵扛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐带。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡今穿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伦籍,到底是詐尸還是另有隱情蓝晒,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布帖鸦,位于F島的核電站芝薇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏作儿。R本人自食惡果不足惜洛二,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晾嘶,春花似錦妓雾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寝志。三九已至娇斑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間材部,已是汗流浹背毫缆。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乐导,地道東北人苦丁。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像物臂,于是被迫代替她去往敵國和親旺拉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容