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