久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 748|回復: 0
打印 上一主題 下一主題
收起左側

關于Linux調試GDB的一些筆記

[復制鏈接]
跳轉到指定樓層
樓主
在linux環境的開發中我們經常遇到一些問題,他不像在板子上裸機開發那么方便,直接jlink連著就能debug,linux下我們總是通過printf打印來看程序跑到哪里了,或者打印一些變量的實時信息,這種方法簡單沒門檻,但是每次改點兒東西就要重新編譯,編譯完后還需要重載程序,非常麻煩
用GNUdebug方法就方便多了,這是一個可以在linux系統下實現代碼debug功能的東西,可以打斷點,步進運行程序,實時監控變量,棧,甚至可以根據自己的想法實時控制程序往哪跑,唯一美中不足的是linux下沒有圖形操作界面。

1、想實現GDB,首先要保證開發板和自己的linux虛擬機能通信,通信不上的可以看看我另一篇帖子

2、在官網下載GDB gnu網/software/gdb/download/  下載源碼,下載完成后,上存到Ubuntu進行解壓,解壓完以后編譯,并且install。我使用的是7.8.2版本,其實我們從網上下別人的源碼庫來自己編譯,經常會編譯報錯的,這個時候需要自己進去里面改改代碼。我附件會帶一個我改好的,不知道咋改的同學可以直接用,當然我更希望大神能調試好更高版本的也分享一下。
解壓后進入build目錄下執行../configure--target=arm-linux--prefix=/work/tools/gdb
然后執行make,make完以后執行make install 可執行文件會放到/work/tools/gdb/bin下,每次使用gdb的時候需要使用絕對路徑啟動這個可執行程序,嫌麻煩可以自己配一下環境變量


3、在開發板上移植gdbserver ,gdbserver 是在開發板上運行的,因此要交叉編譯
進入gdb-7.8.2/gdb/gdbserver目錄
執行../configure--target=arm-linux--host=arm-linux 配置
make CC=arm-linux-gcc交叉編譯//這一步各自看看自己的芯片用的哪個交叉編譯工具,不兼容的話編出來的東西跑不起來的
交叉編譯完后把生成的gdbserver 文件放到開發板文件系統里的/usr/bin目錄下
執行gdbserver --version看看成功沒有


4、將自己的工程編譯的時候加上-g,這樣生成的程序才能進行調試


5、gdbserver 192.168.1.12:2001 comprot 在開發板啟動gdb調試,地址用自己linux虛擬機的地址,comprot是我自己的工程程序
這里的端口隨便填,當然不能和已經被使用的沖突,只要別用常用的那幾個就OK


6、虛擬機里啟動gdb
/work/tools/gdb/bin/arm-linux-gdb /mnt/hgfs/program/\!ocpp板程序/AAOCPP_MQTT2/Protocol-ocpp_wf3_0/bin/comprot
我用的是絕對路徑,后面要帶上本地編譯的可執行文件


7、在虛擬機啟動的gdb命令框里執行target remote 192.168.1.136:2001   
此處的地址是開發板的地址,端口是上面自己設置的端口,要一致


8、如此就啟動完成了,執行b main,可以直接在主函數入口打斷點,并且命令行會輸出打在哪個文件哪一行,自己看看對不對的上



下面附帶一些常用的調試指令
GDB調試命令大全

打斷點:

b [源代碼行號][源代碼函數名][內存地址] 任一參數b main 在主函數入口打斷點b /mnt/hgfs/program/!ocpp板程序/AAOCPP_MQTT2/Protocol-ocpp_wf3_0/main.c:900  在某文件的某行打斷點/條件。例如在循環體中可以設置break ... if i = 100 來設置循環次數

info b 查看打的斷電

clear刪除一個斷點,這個命令需要制定代碼行或者函數名作為參數

disable禁止斷點功能,這個命令需要禁止的斷點在斷點列表索引值作為參數  可以通過info b 看到索引值

Ctrl-C在當前位置停止執行正在執行的程序,斷點在當前行

display在斷點的停止的地方,顯示指定的表達式的值。(顯示變量)

list顯示10行代碼。如果沒有提供參數給這個命令,則從當前行開始顯示10行代碼。如果提供了函數名作為參數,則從函數開頭顯示。如果提供代碼行的編號作為參數,這一行作為開頭顯示。

list顯示10行代碼。如果沒有提供參數給這個命令,則從當前行開始顯示10行代碼。如果提供了函數名作為參數,則從函數開頭顯示。如果提供代碼行的編號作為參數,這一行作為開頭顯示。

load動態載入一個可執行文件到調試器。

next執行下一行的源代碼的所有指令。如果是函數調用,則也當作一行源代碼,執行到此函數返回

nexti執行下一行的源代碼中的一條匯編指令

Print顯示變量的值

ptype顯示變量的類型

return強制從當前函數返回

run從程序開始的地方執行

設置觀察點:

a、watch + [變量][表達式] 當變量或表達式值改變時即停住程序。

b、rwatch + [變量][表達式] 當變量或表達式被讀時,停住程序。

c、awatch + [變量][表達式] 當變量或表達式被讀或被寫時,停住程序。

3E56EB43-201F-4d40-A97D-0965EFCDBAEA.png (67.5 KB, 下載次數: 46)

3E56EB43-201F-4d40-A97D-0965EFCDBAEA.png

gdb-7.8.2.tar.7z

18.38 MB, 下載次數: 0

自己解壓

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线三区 | 超碰av免费 | 日本一区二区高清视频 | 日韩三区| 国产91久久久久久久免费 | 美女国产一区 | 九九热久久免费视频 | 亚洲国产视频一区二区 | 国产日产精品一区二区三区四区 | 欧美激情视频一区二区三区在线播放 | 狠狠av| 欧美日韩在线电影 | 国产精品96久久久久久 | 黄色网址在线免费观看 | 中文在线a在线 | 精品国产一区一区二区三亚瑟 | 成人亚洲一区 | 天天澡天天狠天天天做 | 亚洲97 | 久久精品视频网站 | 免费日本视频 | 一区二区三区中文字幕 | 国产线视频精品免费观看视频 | 久久久夜色精品亚洲 | 欧美一区二区在线播放 | 人人操日日干 | 粉嫩在线| 日韩高清国产一区在线 | 在线观看黄免费 | 亚洲综合在线一区二区 | 久久国产成人午夜av影院武则天 | 成人一区二区三区在线观看 | 日韩和的一区二区 | 国产中文字幕在线 | 91国自产 | 性一爱一乱一交一视频 | 91欧美 | 欧美在线a | 性高朝久久久久久久3小时 av一区二区三区四区 | 草比av| 日韩中文字幕 |