10 15 |
GDB-刺入bug心臟的寶劍作者: Joey 日期: 2008-10-15 16:11 |
寫這篇文章時突然想起一位很久不見的朋友,他是我工作第一年的夥伴,這位好友令我印象最深刻的是他使用GDB的技巧,那時是我第一次看到process可以被attach,signal可以被攔截...等諸如此類的特技表演,我那位朋友對gdb的熟練度可能比吃飯還高,也多虧他的幫忙,讓我瞭解除了printf以外的其它debug好招
這篇文章主要是示範如何進行遠端除錯,所以請先下載最新版的GDB package version 6.8,我的實驗板是QT2410,toolchain為ELDK(ELDK有內建gdbtui),下載解壓縮完後,請執行下面的shell script,讓編出來的gdb可以support ARM架構,--enable-tui是讓GDB編出圖形化UI debug界面
編譯完後請到gdb/gdbserver資料夾下執行下面的shell script並編譯
這樣子我們可以得到一個可在2410上執行的gdbserver
先寫個簡單的小程式並編譯它(for example:arm-linux-gcc –ggdb –o hello hello.c),把測試程式丟到板子上再鍵入指令gdbserver 192.168.15.1:12345 hello,你會看到如下gdbserver啟動的畫面
在host端開啟我們編譯出來的gdbtui,可看到如下畫面,並輸入以下指令
(1)target remote 192.168.15.1:12345(連接遠端的gdbserver)
(2) continue到第一個中斷點時set solib-search-path /usr/local/eldk/arm/lib/(設定動態連結庫的位置),因為gdb預設的share library位置與target board相同,所以導致GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code.
詳細的gdbserver與gdb用法請參考此篇文章
![]() |
linux without mmu:用一般ICE load vmlinux binary即可進行除錯 linux with mmu:請用printk or kgdb(2.6.27的版本對arm的支援比較完整,不過還不夠好) 不過這幾年出現可以debug linux+mmu的ICE,露天好像有賣 |
![]() |
寫MII的driver請多注意linux mii的界面函式 struct mii_phy_def { u32 phy_id; /* Concatenated ID1 << 16 | ID2 */ u32 phy_id_mask; /* Significant bits */ u32 features; /* Ethtool SUPPORTED_* defines */ int magic_aneg; /* Autoneg does all speed test for us */ const char* name; const struct mii_phy_ops* ops; }; 就算沒用到也要宣告這個structure並指派函式給它... 如果ping不出去,請檢查hard_start_xmit是否下錯command或是沒把封包資料填入正確的register |
![]() |
請問一下我在kernel bebug,我有試過 KGDB ,但是我的裝置只有一個 UART,被KGDB佔據了,所以我就看不到printk的log,有什麼方法可以看到printk?另外書上面寫因為KGDB使用簡單的輪詢串列驅動程式,所以串列上傳統的ctrl + c 中斷程序將沒有效果,所以如果一旦我按下ctrl c就只會讓我host端的主機失去對裝置的連線,裝置就會不斷的跑下去,書上面是說建議在sys_sync()下中斷點,然後可以藉由木邊版的一個終端機輸入sync來停止核心進入除錯程式,可是我那唯一的串列負已經被佔據了,要怎麼要用終端機裡輸入sync,我也找不到sys_sync這個函示在我的code裡面,我是用andorid 1.6版的。請問版主知道嗎?感恩~~ |
fw_printenv-control u-boot enviroment variables under linux (2009-05-12 16:35)
rpcapd與netcat-測試嵌入式系統的好工具 (2009-04-09 17:06)
udev-強大的device node管理系統 (2009-02-02 20:35)
Framebuffer兩三事-Test On QT2410 (2009-01-12 16:29)
UIO-Linux user space I/O driver (2008-12-15 14:50)
Telnet daemon-RS232以外的選擇 (2008-10-03 18:57)
在嵌入式系統切換file system-以squashfs和jffs2為例 (2008-10-01 19:44)
Linux kernel module-進入系統核心的鑰匙 (2008-09-12 14:03)
SQLite-麻雀雖小五臟俱全 (2008-09-05 14:46)