<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="Android ICS下用gdb远程调试办法" id="card1">
<p> 游客</p><p>
标题:Android ICS下用gdb远程调试办法<br/>
正文:<br/>
 　　Host: ubuntu　　Target: Android ICS　　1. 将gdbserver和gdbclient分别放入target和host。两者都可在android源代码的prebuilt目录下找到。　　2. 在Target上启动gdbserver，在adb shell中执行　　$ /path/to/gdbserver :1111--attach PID　　其中PID为想要debug程序的进程号，可以通过ps得到。1111为端口号，可以自定义。　　3. 在Host上启动gdbclient，首先将target上的库pull到host上(如/home/jzj/debug/gdb)　　$cd /home/jzj/debug/gdb　　$adb pull /system/lib　　$adb pull /system/bin/app_process　　然后写启动脚本init.gdb(这里假设程序要用到的库放在/home/jzj/debug/gdb/下，android的symbol放在/home/jzj/debug/ics/symbols/system/lib/下，android的源码放在/home/jzj/workspace/ics下)　　file /home/jzj/debug/gdb/app_process　　set solib-absolute-prefix /home/jzj/debug/ics/symbols/　　set solib-search-path /home/jzj/debug/ics/symbols/system/lib/:/home/jzj/debug/gdb　　dir /home/jzj/workspace/ics　　shell adb forward tcp:1111 tcp:1111　　target remote :1111　　最后执行　　$ gdb -x init.gdb　　就可以启动gdb了。一切正常的话这时候就可以用gdb的基本功能，如设断点或者查看内存了。这时有些so库的符号表可能还没载入，可以执行　　(gdb) shared　　载入这些符号表。　　最后附个关于gdb设置脚本中两个变量的官方解释，一般solib-absolute-prefix先于solib-search-path查找。　　solib-absolut<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2088&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2088&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2088&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2088&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=2088">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=2088">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>