`
yanlijun250
  • 浏览: 745478 次
文章分类
社区版块
存档分类
最新评论

用GDB调试Android中C/C++程序(命令行)

 
阅读更多

一、编译Android gdbserver(非必须)

因手头Android 2.3源码编译后的版本执行gdbserver时报错:Segmentation fault,不得不重新编译gdbserver。


1、编译gdbserver

编译过程参考博文:自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题)


2、使用新编译的gdbserver替换原有版本gdbserver

simba@simba-Vostro-3400:~/neptune/android_2.3$ adb push ~/gdb_build/install/gdbserver /system/bin


二、使用带调试符号表的C/C++程序替换原有程序

simba@simba-Vostro-3400:~/neptune/android_2.3$ adb push out/target/product/xxxx/symbols/system/bin/debug_demo /system/bin


三、使用gdbserver调试android C/C++程序

1、gdbserver attach被调试程序

方法一:adbshell中以gdbserver参数的形式执行被调试程序

simba@simba-Vostro-3400:~/neptune/android_2.3$ adb shell gdbserver :5039 /system/bin/debug_demo &

[3] 17600
simba@simba-Vostro-3400:~/neptune/android_2.3$ Process /system/bin/debug_demo created; pid = 3323
Listening on port 5039


方法二:adbshell中执行被调试的程序,ps命令查看其PID并gdbserver attach

simba@simba-Vostro-3400:~/neptune/android_2.3$ adb shell /system/bin/debug_demo &
[3] 22614
simba@simba-Vostro-3400:~/neptune/android_2.3$ adb shell ps | grep /system/bin/debug_demo

root 3353 3352 1048 412 800cc220 6fd0bdac S /system/bin/debug_demo

simba@simba-Vostro-3400:~/neptune/android_2.3$ adb shell gdbserver :5039 --attach 3353 &

[4] 26856
simba@simba-Vostro-3400:~/neptune/android_2.3$ Attached; pid = 3353
Listening on port 5039


2、调试端口映射,把设备的5039端口映射到PC的5039

simba@simba-Vostro-3400:~/neptune/android_2.3$ adb forward tcp:5039 tcp:5039

设定之后用netstat -na命令可看到PC的5039端口已处于listen状态

simba@simba-Vostro-3400:~/neptune/android_2.3$ netstat -na | grep 5039

tcp 0 0 127.0.0.1:5039 0.0.0.0:* LISTEN


3、gdb客户端命令行调试

simba@simba-Vostro-3400:~/neptune/android_2.3$ /home/simba/neptune/android_2.3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gdb ./out/target/product/xxxx/symbols/system/bin/debug_demo


(gdb) set solib-absolute-prefix ./out/target/product/xxxx/symbols/system/bin/

(gdb) set solib-search-path ./out/target/product/xxxx/symbols/system/bin


这里的gdb的版本一定要正确。这时已经进入了gdb调试模式,还需要进行与远程的gdbserver进行连接,在gdb模式下输入:

(gdb) target remote :5039


4.开始愉悦的调试吧


四、后记

用命令行调试比较繁琐,习惯使用Eclipse参考:用 Eclipse + GDB调试Android中C/C++程序

--

参考文章:

GDB 命令详细解释

用Eclipse开发与调试纯粹的Android C++程序,非ndk-build、ndk-gdb

GDB: The GNU Project Debugger



分享到:
评论

相关推荐

    使用GDB命令行调试器调试C/C++程序

    绍GDB命令行调制器调试C\C++程序。

    linux c/c++ gdb浅析

    linux新手GDB入门,以c/c++为例,讲解GDB常用的操作。。。。。。

    Linux GDB C/C++调试基础与提升课程

    分享一套课程——Linux GDB C/C++调试基础与提升视频课程,提供源码+PPT下载。

    linux c/c++ gdb调试手册

    linux c/c++ gdb调试手册

    用GDB调试程序 用GDB调试程序

    用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序

    Linux GDB C/C++调试基础与提升

    Linux GDB C/C++调试基础与提升视频教程分享,视频+源码+PPT下载 一、gdb的概述 gdb是GNU开源组织发布的一个强大的UNIX下的程序调试工具。 二、gdb的使用场景 启动你的程序,可以按照你的自定义的要求随心所欲的...

    用GDB调试程序.pdf

    GDB 是GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方 式的,像VC、BCB 等IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有 比VC、BCB 的图形化...

    用GDB调试程序(整理有书签).pdf

    陈浩-用GDB调试程序(整理有书签).pdf+守望的个人博客-GDB调试指南(整理有书签).pdf

    在unix中用GDB调试C\C++程序

    在unix中用GDB调试程序。 从CSDN的网站上找到的GDB使用说明。 原文标题:用GDB调试程序 作者:haoel (QQ是:753640,MSN是: haoel@...关键字:gdb 调试 c c++ gun 这篇文章非常好,所以转载了下来,作为收藏。

    Eclipse+CDT+GDB调试android NDK程序

    Eclipse+CDT+GDB调试android NDK程序

    google-perftools 源码 (一款针对 C/C++ 程序的性能分析工具)

    gdb 是 Linux 上广泛使用的调试工具,它提供了强大的命令行功能,使我们可以在程序运行时插入断点并在断点处执行其他函数。具体的文档请参照 http://www.gnu.org/software/gdb/,本文中将只对用到的几个基本功能进行...

    gdb.exe调试器,c/c++

    这个版本是可以用的,但是要装python2.7,我试了py3是不行的,只能装2.7了,如果少dll的话 去网上下就行

    linux 用GDB调试C和C++程序

    linux 用GDB调试C和C++程序,这个文档是我从http://wiki.ubuntu.org.cn/index.php?title=用GDB调试程序&variant=zh-cn 上面复制,然后进行编辑之后,为了方便我的打印,我编辑好了的,如果没有积分可以去这个网站...

    GDB调试GDB调试

    GDB调试GDB调试GDB调试GDB调试GDB调试 GDB调试GDB调试GDB调试GDB调试GDB调试

    GDB调试程序[陈皓]&GDB调试工具指南

    GDB调试程序[陈皓] GDB调试工具指南 两个pdf文件

    eclipse 开发c/c++

    这些插件将 C/C++ 透视图添加到 Eclipse 工作台(Workbench)中, 现在后者可以用许多视图和向导以及高级编辑和调试支持来支持 C/C++ 开发。 由于其复杂性,CDT 被分成几个组件,它们都采用独立插件的形式。 每个...

    用GDB调试程序

    用GDB调试程序

    Linux开发入门:使用gdb调试C/C++入门教程

    GDB(GNU symbolic debugger)简单地说就是一个调试工具。...在你调试你的程序之前,当你编译你的源程序时,不要忘了 -g 选项或其它相应的选项,才能将调试信息加到你要调试的程序中。例如:gcc -g -o hello hello.c 。

Global site tag (gtag.js) - Google Analytics