Android gdb 调试
来源:互联网 发布:新店能开淘宝直播吗 编辑:程序博客网 时间:2024/06/07 14:57
其实抛开android 应用环境,Gdb 本身就是个神迹。
Gdb作用:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
Gdb原理图:
特别对于android native 层code,有时当我们难以理清程序动态执行时复杂函数调用、参数传递设置等等时,那么此时可以考虑gdb了。
如何使用Android gdb 调试:
Target : android 4.2.2 真机
Host : Ubuntu 64位
1.target 端:
1.1 进入adb 查看目标机器当前gdbserver版本号,如果没有安装则需要到源码ndk目录下找到相应gdbserver,push到/system/bin/目录下
1.1.2 ps 命令查看所要调试进程号,以mediaserver为例
1.3 目标端监听mediaserver进程
2.HOST端
2.1 找到相应的gdb调试程序
../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gdb
尝试运行./arm-linux-androideabi-gdb,但报错:
error while loading shared libraries: libpython2.6.so.1.0: cannot open shared object file: No such file or directory
解决方法:sudo ln -s /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 /usr/lib/x86_64-linux-gnu/libpython2.6.so.1.0
2.2 运行gdb,注意gdb 版本
2.3 实现host对target远程监听,前tcp 1234代表local,后代表remote
到目前为止,看起来很顺利。。
2.4 加载调试二进制文件,一定要注意要与目标调试进程相对应。如调试进程mediaserver,我需要加载mediaserver,如果是app,则需要加载app_process.还要注意路径为symbols下。
2.5设置相应debug 包含symbols的库文件,同样注意路径为symbols下。
库文件绝对路径:
set solib-absolute-prefix /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/
库文件相对路径:
set solib-search-path /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/lib/
此时如果ok的话,可以看到相应的动态链接库加载成功了。
Reading symbols from /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/bin/linker...done.
Loaded symbols for /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/bin/linker
Reading symbols from /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/lib/libc.so...done.
Loaded symbols for /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/lib/libc.so
Reading symbols from /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/lib/libstdc++.so...done.
Loaded symbols for /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/lib/libstdc++.so
Reading symbols from /home/wangbin/wz_code/4-2-2_r1_wbBranch/out/target/product/rk30sdk/symbols/system/lib/libm.so...done
....................................
3.可以开始调试之旅了,我在audioflinger 加断点,可以看到gdb的强大了,哈哈。
正如你所看到的,很顺利可以用gdb调试了,但过程真的如此么?其实略坎坷,实际中可能会遇到各种问题。例如:cannot access adrress 0x.... 或者info sharedlibrary 显示动态库未加载。可以尝试两个思路,一个是对应gdb版本是否匹配。如果你非常细心的话(当然,没看到也不代表不细心。。),2.2图中,我所运行并不是2.1路径下的gdb,版本不匹配可能会导致了一系列的问题。二就是host端file一定要加载对应的可执行文件。关于绝对路径和相对路径加载详细解释可参考:http://blog.csdn.net/_xiao/article/details/23289971 之前还谷歌了一文也不错,但没及时保存,怪我咯!
参考文章:
http://www.cnblogs.com/scue/p/4462523.html
http://blog.csdn.net/xinfuqizao/article/details/7955346
http://blog.chinaunix.net/uid-12567959-id-3214283.html
http://blog.chinaunix.net/uid-21254310-id-3447060.html
- gdb android 调试
- Android 使用gdb调试
- Android gdb调试so
- gdb调试android
- Android 下GDB调试
- android ndk gdb 调试
- Android GDB调试system_server
- gdb调试android内核
- gdb android 调试cgdbserver
- Android gdb调试
- Android调试gdb初探
- Android GDB调试
- Android ndk-gdb 调试
- Android gdb 调试步骤
- Android gdb 调试
- android ndk-gdb 调试
- gdb 调试android 程序
- Android gdb调试
- setContentView( )方法
- Python check passwd
- JAX-WS Spring集成jax方式的webservice
- JAVA深度克隆
- iOS开发 - 控制在生命周期内只运行一次
- Android gdb 调试
- con
- Java中的两种多线程实现方式
- TexturePacker纹理打包打方法及技巧
- 判断当前app是不是default SMS app
- Android之WebView详解
- FastJson处理json数据时遇到一个问题
- 尾递归与Continuation(Haskell描述)未完成
- Sybase bcp命令详解