轉載_使用DDD+GDB開發ARM Linux程式
Process lg created; pid = 402
Listening on port 2345 切換到本機:
[email protected]:~/lgraphics>arm-linux-gdb lg
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,and you are
welcome to change it and/or distribute copies of it under certainconditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty"for details.
This GDB was configured as "--host=i686-pc-linux-gnu--target=arm-linux"...
(gdb) target remote 192.168.2.223:2345 lg
Remote debugging using 192.168.2.223:2345 lg
0x40001290 in _start () from /lib/ld-linux.so.2
此時,目標機上也會出現: Remote debugging from host 192.168.2.31 在本機上輸入: (gdb) bmain (設定斷點到main函式)
Breakpoint 1 at 0x9c00: file lgraphics.c, line442.
(gdb)cont (開始執行)
Continuing. Breakpoint 1, main () atlgraphics.c:442 (遇到斷點,並顯示斷點程式行)
442 int i, j, b = 0;
(gdb)step (單步執行)
445 linitgraph("/dev/fb0"); (顯示目前程式行) 好了,看到這裡,差不多就明白GDB是幹什麼的、怎麼用了吧。我相信你會和我一樣對GDB介面的不友好表示憤慨,想想Windows下的開發工具,哪一種除錯的時候還是文字介面的。幸運的是,有一些勤快的人,幫我們寫了很多GDB的圖形化前端,我們更本不用像上面這樣使用GDB。 開始說DDD。DDD是一種GDB的圖形化前端,就是一種用圖形介面幫你輸入繁瑣的GDB除錯指令工具。當然,也有很多文章說DDD多麼不足,用Insight來取代它之類的。我的Suse裡恰好就有DDD,我也不管那麼多了,先用了。看看用DDD的時候怎麼除錯: 一樣本機上編譯:
Process lg created; pid = 402
Listening on port 2345 切換到本機:
[email protected]:~/lgraphics> ddd-debugger arm-linux-gdb lg 然後就會啟動DDD的圖形介面,在視窗下方有一個文字輸入框,這裡就是ddd的基礎gdb的所在,在這裡輸入targetremote 192.168.2.223:2345lg,提示資訊和我們用GDB時候是一樣的。不同的是,除了這句連線目標機的指令,其他指令都不用輸入了,可以在圖形化介面裡找到,這我就不說了。另外,連線目標機的指令也可以用在DDD中設定,不用輸入,可以查詢其他介紹DDD使用的文章。下面是DDD的圖形介面,工具欄下面的是watch,程式碼可以設定斷點(紅色點),可以看到單步位置(綠色箭頭),右邊是執行控制工具條,最下面是GDB的輸入和輸出顯示。
=====================================================================================
SPLIT
=====================================================================================
ARM Linux 交叉除錯工具及方法
一、交叉除錯工具
1、主機 : arm-linux-gdb
2、 arm: gdbserver
在開發主機上執行 arm-linux-gdb 程式,可以通過串列埠或網口與駐留在 ARM 開發板上的 gdbserver
程式進行通訊,完成 ARM 開發板上應用程式的除錯和跟蹤。
二、交叉除錯工具的生成
1、下載 gdb 原始碼
譯即可獲得以上兩個工具軟體。
gdb 原始碼的版本為: gdb-6.8
原始碼包名稱: gdb-6.8a.tar.bz2
2、編譯環境
開發主機系統: ubuntu11.10
開發主機 gcc 版本: 4.4.6
交叉編譯器版本: 4.5.1
三、配置和編譯
1、解壓原始碼
首先進入 gdb-6.8a.tar.bz2 所在的目錄,解壓後會在當前目錄生成新的原始碼目錄: gdb-6.8,在 shell
下輸入以下命令 (紅色為命令 )。
[email protected]:~/Downloads$tar -xvf gdb-6.8a.tar.bz2
2、進入原始碼目錄
進入 gdb-6.8 目錄,命令如下:
[email protected]:~/Downloads$ cd gdb-6.8
[email protected]:~/Downloads/gdb-6.8$
建立目標檔案目錄,命令如下:
[email protected]:~/Downloads/gdb-6.8$ mkdir output
3、編譯 arm-linux-gdb
在原始碼目錄下進行配置,配置完成後會在當前目錄和 gdb 目錄下生成 Makefile 檔案,命令如下:
[email protected]:~/Downloads/gdb-6.8$./configure --target=arm-linux --enable-shared
--prefix=/home/bill/Downloads/gdb-6.8/output/x86 --without-x --disable-gdbtk --without-
included-regex --without-include-gettext
編譯,命令如下:
[email protected]:~/Downloads/gdb-6.8$ make
編譯過程中會出錯,資訊如下:
cc1: warnings being treated as errors
.././gdb/cli/cli-cmds.c: In function ‘pwd_command’:
.././gdb/cli/cli-cmds.c:323: error: ignoring return value of ‘getcwd’, declared with attribute
warn_unused_result
make[2]: *** [cli-cmds.o] Error 1
make[2]: Leaving directory `/home/bill/Downloads/gdb-6.8/gdb'
make[1]: *** [all-gdb] Error 2
make[1]: Leaving directory `/home/bill/Downloads/gdb-6.8'
make: *** [all] Error 2
經過對以上資訊分析可知,編譯時把告警按錯誤看待,所以編譯失敗。解決辦法是修改 gdb-6.8/gdb
目錄下的 Makefile 的第 145 行,即註釋調” -Werror“即可
#WERROR_CFLAGS = -Werror
WERROR_CFLAGS =
安裝,目標檔案會安裝在 /home/bill/Downloads/gdb-6.8/output/x86 目錄下,命令如下:
[email protected]:~/Downloads/gdb-6.8$ make install
4、編譯 gdbserver
進入 gdbserver 目錄,命令如下:
[email protected]:~/Downloads/gdb-6.8$ make gdb/gdbserver
進行配置,命令如下:
[email protected]:~/Downloads/gdb-6.8$./configure --host=arm-linux
--prefix=/home/bill/Downloads/gdb-6.8/output/arm --without-include-regex --without-included-
gettext
編譯,命令如下:
[email protected]:~/Downloads/gdb-6.8/gdb/gdbserver$make
安裝,目標檔案 gdbserver 會安裝在 /home/bill/Downloads/gdb-6.8/output/arm 目錄下,命令如下:
[email protected]:~/Downloads/gdb-6.8/gdb/gdbserver$make install
gdbserver 進行瘦身,命令如下:
[email protected]:~/Downloads/gdb-6.8/gdb/gdbserver$arm-linux-strip /home/bill/Downloads/gdb-
6.8/output/arm/gdbserver
四、測試
以除錯測試例程為例:
原始檔: test.c
編譯目標可執行檔案: gcc -g -o test test.c,注意一定要加上” -g“,否則不能進行除錯。
1、目標板上操作
將生成的 test 檔案和 gdbserver 下載到 ARM 開發板上,在開發板的 Shell 上輸入:
#./gdbserver 192.168.1.100:2345 test
其中 192.168.1.100 為開發機的 IP 地址
2、開發機上操作
[email protected]:~/Downloads/gdb-6.8/gdb/output/x86$./arm-linux-gdb test
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...
(no debugging symbols found)
(gdb)target remote 192.168.1.5:2345
其中 192.168.1.5 為開發板的 IP 地址
連線上後開發板的串列埠上會出現以下列印:
Remote debuging from host 192.168.1.100
(gdb)
相關推薦
轉載_使用DDD+GDB開發ARM Linux程式
今天又取得了一些進展,趕快寫下來以免自己忘記。 自從Linux在我的板子上跑起來之後,我一直在想一個問題,怎麼除錯將來寫的程式。其實我在Linux開發方面真得很外行,到了今天才知道GDB到底是幹什麼用的,呵呵。我相信很多人從Bootloader除錯開始一直都使用LED啊,printf這樣的方法來除錯。我做畢
用eclipse整合開發環境開發、除錯arm linux程式
安裝交叉編譯器(arm-linux-gcc)以及整合開發環境(eclipse) 1.安裝arm-linux-gcc,不管你是從網上下載的,還是開發板光盤裡面的,都可以,版本也沒什麼限制,我的是arm-linux-gcc-4.3.2。 進入arm-linux-gcc
【Linux開發】Linux及Arm-Linux程式開發筆記(零基礎入門篇)
Linux及Arm-Linux程式開發筆記(零基礎入門篇) 目錄 一、Arm-Linux程式開發平臺簡要介紹... 3 1.1程式開發所需系統及開發語言... 3 1.2系統平臺搭建方式... 4 二、Linux開發平臺搭建... 5 2.1安裝虛擬工作站...
gdb和arm-linux-gdb命令詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
在android系統命令列中執行arm linux程式,出現/system/bin/sh: .xxx No such file or directory問題
android系統的底層就是Linux,理論上arm linux程式在android系統中也能夠執行。但是當我寫了一個“Hello World”程式並執行時,出現了下面的錯誤: system/bin/sh:./ a.out No such file or directory
在arm-linux上用gdb除錯程式,出現“Program received signal SIGPIPE, Broken pipe”
出現這種情況大多是因為程式採用CS架構(伺服器/客戶端)在讀寫操作時出現,我第一次也是在這樣的情況下遇到的。首先我們都知道套接字的通訊方式是雙工的,同端即可寫也可讀。而出現Broken pipe這種情況的原因是寫段正在寫入時,另一端已關閉套接字,這樣程序就會向
GDB arm-linux交叉編譯移植和使用方法(特別是對於正在執行的程式或者段錯誤的程式進行分析)
測試程式碼中的test1是用來定位堆疊段錯誤,Delay函式是用來定位程式阻塞,都可以用gdb定位出來,如下: (1)測試程式執行時首先會有個段錯誤:./gdbtest & [[email protected] user0]$ [65334.020000] pgd = c3e14000 [
visual GDB配合 visual studio 2013開發 linux程式
visualGDB官網: https://visualgdb.com 參考網址: http://www.cnblogs.com/robinex/p/7875934.html VS外掛VisualGDB破解版下載、安裝和使用說明 https://blog.csdn.net/su
ARM+linux環境下程式的開發和燒錄
一 方法一( 串列埠通訊 ): 1. 在PC開發端的linux環境中寫好原始碼。 2. 使用交叉編譯器arm-linux-gcc編譯之。 3. 用超級終端或者DNW建立ARM開發板與PC開發端的連線給ARM開發
Windows下ARM Linux應用程式開發環境搭建說明
這是因為工作寫的一個文件,主要是我們開發人員都不會Linux不會vi也不會命令列,於是研究了一下Windows系統除錯ARM Linux程式的辦法,在這共享一下。1. 概述嵌入式Linux系統的應用程式開發,編譯器一般是gcc,一般都說是要在Linux虛擬機器中進行開發和編譯。本文提供了一種能夠在Wind
通過buildroot+qemu搭建ARM-Linux虛擬開發環境
inux http lex .org linux 通過 clone .gz download 1. 配置工作環境 sudo apt install gcc build-essential bison flex gettext tcl sharutils libncur
[ARM-Linux開發]深入理解 sudo 與 su 之間的區別
在早前的一篇文章中,我們深入討論了 sudo 命令的相關內容。同時,在該文章的末尾有提到相關的命令 su的部分內容。本文,我們將詳細討論關於 su 命令與 sudo 命令之間的區別。 在開始之前有必要說明一下,文中所涉及到的示例
Linux程式宕掉後如何通過gdb查看出錯資訊
我們在編寫服務端程式的時候,由於多執行緒並且環境複雜,程式可能在不確定條件的情況下宕掉,還不好重新,這是我們如何獲取程式的出錯資訊,一種方法通過打日誌,有時候一些錯誤日誌也不能體現出來,這時就用到我們的core dump檔案了。 通常情況下coredmp包含了程式執行時的
Linux下使用gdb除錯C/C++程式
在筆者工作實踐中,使用gdb除錯C++程式和除錯C程式,他們稍有不同,下面是使用總結。 一、編譯選項 -g 生成除錯資訊 -gstabs+ 以stabs格式生成除錯資訊,並且包含僅供gdb使用的額外除錯資訊生成除
ICTCLAS2016 linux C++版本 使用教程 Eclipse下開發C/C++程式之標頭檔案,庫檔案引用
歡迎使用NLPIR/ICTCLAS2014分詞系統 NLPIR分詞系統前身為2000年釋出的ICTCLAS詞法分析系統,從2009年開始,為了和以前工作進行大的區隔,並推廣NLPIR自然語言處理與資訊檢索共享平臺,調整命名為NLPIR分詞系統。張華平博士先後傾力打造十餘
ARM-Linux基本開發步驟
拿到一塊YC2440(s3c2440)的開發板,經過幾天的學習,我對arm-linux系統開發步驟有了一些認識。就以開發這個開發板為例,arm-linux開發工作大概分4個部分 1. 硬體(hardware) 2. 
windows系統tomcat上開發的j2ee程式,如何適配linux系統上奔跑的websphere7
公司需要將幾個windows系統tomcat中介軟體下開發的j2ee系統部署到linux系統websphere7中介軟體下去執行。 這就需要做系統的適配工作。由於時間比較久了,具體問題就不詳細寫了。把這個適配工作主要可能涉及到的方面,遇到的問題表現做了一個小的總結,希望能夠幫到有需要的同學。
在桌面Linux環境下開發圖形介面程式的方案對比
在Linux下開發GUI程式的方法有很多,比如Gnome桌面使用GTK+作為預設的圖形介面庫,KDE桌面使用Qt作為預設的圖形介面庫,wxWidgets則是另一個使用廣泛的圖形庫,此外使用Java中的Swing/AWT元件也可以用於開發Linux下的GUI應用。 本文將依次
移植SSH到ARM Linux開發板
編譯器arm-linux-gcc和arm-none-linux-gnueabi-gcc成功。 在移植到友善2440的時候很容易,因為他4.3.2交叉編譯器等庫檔案做等好。但是在移植到天漠devkit8000時,遇到非常多的問題。一個月之前遇到問題沒有找到
Linux 程式設計師的自我修養:玩轉 GDB 除錯
我從學生時代到進入軟體開發這個行業,不知不覺已經十餘年了。這些年,先後在網遊公司做過遊戲伺服器,為上海某交易所做過金融交易系統、在金融證券公司做過股票證券交易系統和即時通訊軟體、在音視訊直播公司做過直播伺服器,各種專案使用的伺服器作業系統都是 Linux,開發語言是 C/C++。 正如從