Android中使用arm-eabi-gdb和vim进行调试

1.##gdbserver 10.0.2.2:1234 /system/bin/ping

 

 

2.$telnet localhost 5554

 

Trying ::1...

telnet: connect to address ::1: Connection refused

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

Android Console: type 'help' for a list of commands

OK

 

redir add tcp:1234:1234

 

3.(gdb)file ping

4.(gdb)target remote localhost:1234

 

5.(gdb)l main

(gdb)b main

(gdb) c 不是run

 

6.<<<gdb_mappings.vim>>>

" Mappings example for use with gdb

" Maintainer: <xdegaye at users dot sourceforge dot net>

" Last Change: Mar 6 2006

 

if ! has("gdb")

    finish

endif

“ ---------------------------------------------------------------------------------------

 

" Shift+E

let s:emOS_K = 1

nmap <silent> E :call <SID>emOS()<CR>

 

function! s:emOS()

if s:emOS_K

let s:emOS_K = 0

exec ":! ln -sf ~/android/android_eclair/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb ~/usr/bin/gdb"

echohl ErrorMsg

echo "Now! Gdb is ready for Embedded System!!!"

echohl None

else

let s:emOS_K = 1

exec ":! ln -sf /usr/bin/gdb-pc ~/usr/bin/gdb"

echohl ErrorMsg

echo "Gdb is ready for PC Now."

echohl None

endif

endfunction

 

 

“ ---------------------------------------------------------------------------------------

 

let s:gdb_k = 1

nmap <F7> :call <SID>Toggle()<CR>

 

" Toggle between vim default and custom mappings

function! s:Toggle()

    if s:gdb_k

    “ ---------------------------------------------------------------------------------------

    nmap <F8> :bel 25vsplit gdb-variable<CR>

    nunmap E

     “ ---------------------------------------------------------------------------------------

 

let s:gdb_k = 0

 

map <Space> :call gdb("")<CR>

nmap <silent> <C-Z> :call gdb("/032")<CR>

 

nmap <silent> B :call gdb("info breakpoints")<CR>

nmap <silent> L :call gdb("info locals")<CR>

nmap <silent> A :call gdb("info args")<CR>

nmap <silent> S :call gdb("step")<CR>

nmap <silent> I :call gdb("stepi")<CR>

nmap <silent> <C-N> :call gdb("next")<CR>

nmap <silent> X :call gdb("nexti")<CR>

nmap <silent> F :call gdb("finish")<CR>

nmap <silent> R :call gdb("run")<CR>

nmap <silent> Q :call gdb("quit")<CR>

nmap <silent> C :call gdb("continue")<CR>

nmap <silent> W :call gdb("where")<CR>

nmap <silent> <C-U> :call gdb("up")<CR>

nmap <silent> <C-D> :call gdb("down")<CR>

 

" set/clear bp at current line

nmap <silent> <C-B> :call <SID>Breakpoint("break")<CR>

nmap <silent> <C-E> :call <SID>Breakpoint("clear")<CR>

 

" print value at cursor

nmap <silent> <C-P> :call gdb("print " . expand("<cword>"))<CR>

 

" display Visual selected expression

vmap <silent> <C-P> y:call gdb("createvar " . "<C-R>"")<CR>

 

" print value referenced by word at cursor

nmap <silent> <C-X> :call gdb("print *" . expand("<cword>"))<CR>

 

echohl ErrorMsg

echo "gdb keys mapped"

echohl None

 

    " Restore vim defaults

    else

let s:gdb_k = 1

“ ---------------------------------------------------------------------------------------

exec ":! ln -sf /usr/bin/gdb-pc /~/usr/bin/gdb"

nmap <silent> E :call <SID>emOS()<CR>

“ ---------------------------------------------------------------------------------------

nunmap <Space>

nunmap <C-Z>

nunmap B

nunmap L

nunmap A

nunmap S

nunmap I

nunmap <C-N>

nunmap X

nunmap F

nunmap R

nunmap Q

nunmap C

nunmap W

nunmap <C-U>

nunmap <C-D>

 

nunmap <C-B>

nunmap <C-E>

nunmap <C-P>

nunmap <C-X>

 

echohl ErrorMsg

echo "gdb keys reset to default,reset gdb to gdb-pc."

echohl None

    endif

endfunction

 

" Run cmd on the current line in assembly or symbolic source code

" parameter cmd may be 'break' or 'clear'

function! s:Breakpoint(cmd)

    " An asm buffer (a 'nofile')

    if &buftype == "nofile"

" line start with address 0xhhhh...

let s = substitnmap <F8> :bel 25vsplit gdb-variable<CR>ute(getline("."), "^//s*//(0x//x//+//).*$", "*//1", "")

if s != "*"

   call gdb(a:cmd . " " . s)

endif

    " A source file

    else

let s = "/"" . fnamemodify(expand("%"), ":p") . ":" . line(".") . "/""

call gdb(a:cmd . " " . s)

    endif

endfunction

 

“ ---------------------------------------------------------------------------------------

" map gdb-pc/arm-eabi-gdb

call s:emOS()

“ ---------------------------------------------------------------------------------------

 

" map vimGdb keys

call s:Toggle()

 

说明:上述方法是为了方便,但这样修改反而变得复杂了。如果要实现PC和ARM不同gdb的之间的切换手动就可以了。

 

#gdb-sel.sh

 

#!/bin/bash

 

echo "select gdb between PC and ARM."

echo "Please use:

ln -sf /media/sanux/android/android_eclair/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb /media/sanux/usr/bin/gdb

or

ln -sf /usr/bin/gdb-pc /media/sanux/usr/bin/gdb"

 

echo -ne "current gdb is:/n"

ls -l /media/sanux/usr/bin/gdb

#ln -sf /media/sanux/android/android_eclair/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb /media/sanux/usr/bin/gdb

#ln -sf /usr/bin/gdb-pc /media/sanux/usr/bin/gdb

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值