1,http://www.gnu.org/software/gdb/download/,下載最新版本的gdb原始碼包,我使用的是gdb-7.6.tar.gz,使用tar命令進行解包(tar -xvzf gdb-7.6.tar.gz),cd進gdb-7.6/gdb目錄,使用vi找到remote.c中的如下程式碼:
if(buf_len > 2 * rsa->sizeof_g_packet)
error(_("Remote 'g' packet reply is too long: %s"),rs->buf);
將上面兩行註釋掉,新增如下程式碼
if(buf_len > 2 * rsa->sizeof_g_packet)
{
rsa->sizeof_g_packet = buf_len;
for(i = 0; i < gdbarch_num_regs(gdbarch); i++)
{
if(rsa->regs[i].pnum == -1)
continue;
if(rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}
使用如下命令對程式碼進行配置、編譯和安裝
./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
make
make install
2,gdbserver使用android4.2模擬器中自帶的版本(v7.1)
3,將NDK編譯好的C/C++可執行程式,上傳到模擬器中/data/test目錄下,假設可執行程式的名稱為testHello。
4,使用命令:gdbserver :7000 /data/test/testHello 啟動模擬器端的除錯。
5,啟動arm-linux-gdb之前,使用vi開啟~/.bash_profile檔案,在其中新增:
export PATH=$PATH:/usr/local/arm-gdb/bin,以便在程式的其他目錄可以直接啟動arm-linux-gdb程式
6,cd至ndk編譯好的testHello檔案所在目錄
7,使用如下命令進行埠對映:adb forward tcp:7000 tcp:7000,將模擬器的7000埠和本機的7000埠進行對映
8,使用命令:arm-linux-gdb testHello啟動gdb除錯
9,使用target remote :7000 連結模擬器中gdbserver啟動的服務。
10,自此,我們就可以使用gdb命令進行程式碼除錯了。