一、编译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 50392、调试端口映射,把设备的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
分享到:
相关推荐
NDK是一组工具,允许开发者在Android应用中使用原生代码,即C和C++,并将其编译为本地机器码,从而提升性能。 1. **NDK概述** - NDK提供了一系列的交叉编译工具,使得开发者可以在非Android设备上编译出能在...
### Eclipse+CDT+GDB调试Android NDK程序详解 #### 开发环境确认与准备 在开始使用Eclipse+CDT+GDB调试Android NDK程序之前,首先需要确保已经搭建好以下开发环境: 1. **Ubuntu 11.10**:作为主要的操作系统,...
【Eclipse+CDT+GDB调试Android NDK程序】是一种在Eclipse集成开发环境中,利用CDT(C/C++ Development Tooling)和GDB(GNU Debugger)进行原生代码调试的技术。Android NDK允许开发者在Android应用中使用C或C++编写...
《深入解析aarch64架构下的Android GDB调试技术》 在移动设备和嵌入式系统领域,aarch64架构已经成为主流,特别是在Android平台上,它为开发者提供了强大的64位计算能力。与此同时,为了更好地调试和优化软件,理解...
Android NDK-GDB是针对使用C/C++编程语言在Android平台上开发应用的开发者所必备的调试工具。从NDK r4版本开始,NDK引入了NDK-GDB,使得开发者能够方便地对本地代码进行调试。本文将详细介绍NDK-GDB的使用方法及其...
GDB (GNU Debugger) 和GDBserver是Linux和Android系统中常用的远程调试工具,它们允许开发者在本地主机上控制运行在目标设备上的程序。本文将详细介绍如何在Android 6.0上安装和使用GDB及GDBserver,以及如何利用...
在Android开发中,GDB通常与NDK(Native Development Kit)一起使用,用于调试C和C++的原生代码。由于Android系统部分核心组件以及许多应用使用了这些语言编写,因此原生代码的调试能力至关重要。GDBserver是GDB的一...
- **定义**:Android NDK (Native Development Kit) 是一套工具集,它提供了必要的工具和文档来帮助开发者使用 C 或 C++ 编写原生应用层代码。尽管 Java 仍然是 Android 应用开发的主要语言,但 NDK 提供了额外的...
3. **安全加密**:敏感数据处理和加密算法往往使用C/C++编写,以提高安全性。 4. **跨平台开发**:已有的C/C++代码库可直接在Android上复用,简化跨平台开发工作。 五、NDK的挑战与注意事项 1. **调试困难**:...
Android NDK(Native Development Kit)是Google为Android平台提供的一个工具集,允许开发者使用C和C++编写原生代码,从而实现对Android系统的底层访问。NDK的主要用途在于提高性能、利用硬件加速、以及调用已有的C/...
NDK-GDB是一个用于Android Native Debugging的工具,它于Android r4版本引入,主要目的是简化对使用NDK编译的C/C++代码进行调试的过程。这个工具位于NDK的顶级目录下,需要通过命令行从应用程序的目录或其子目录下调...
在Android开发过程中,调试是必不可少的一个环节,它能帮助我们找出程序中的错误,优化性能,以及确保应用在各种条件下的正确运行。本文将深入探讨"Android调试工程测试"这一主题,涵盖关键知识点,并以hello-jni这...
在Android NDK(Native Development Kit)中,GDB Server扮演着核心角色,允许开发者远程调试C和C++代码,尤其是在开发Android应用的原生库时。 GDB Server的工作原理是接收来自GDB客户端的调试命令,然后在目标ARM...
Android NDK,全称为Native Development Kit,是Google为Android开发者提供的一个工具集,允许他们在Android平台上使用C和C++编写原生代码。Android系统主要基于Java进行应用开发,但NDK的引入使得开发者能够利用C/...
在Android开发中,NDK(Native Development Kit)是一个重要的工具集,它允许开发者使用C和C++编写部分应用程序,特别是那些需要高性能计算或与硬件紧密交互的组件。NDK的主要用途在于提供原生代码支持,使得开发者...
在Windows环境下,开发和调试C或C++程序时,通常会使用开源的GNU Debugger(GDB)工具。本文主要探讨如何在Win10系统中编译适用于Windows的GDB 8.3.1版本,以及如何配合gdbserver和ADB进行远程调试。这将帮助开发者...
8. **调试C/C++代码**:如果需要调试C/C++代码,可以使用cygwin中的gdb。设置好源代码路径和调试信息后,可以连接到运行中的Android应用进行调试。 通过这样的流程,你就可以在Android应用中利用NDK进行高性能计算...
4. **调试支持**:可以利用arm-linux-androideabi-gdb进行远程调试,以定位和修复问题。 总之,arm-linux-androideabi-4.9工具链是Windows开发者进行Android原生编程的重要桥梁,它使得开发者能够在熟悉的Windows...
Windows环境下搭建Android NDK环境是为了在Android应用开发中使用C和C++代码,生成.so动态库。这个过程涉及到多个步骤,包括安装和配置SDK、NDK、Eclipse、Cygwin等工具。 1. **SDK、NDK、Eclipse的安装** - ...
GDB是GNU项目的一部分,是一个强大的源码级调试器,支持多种编程语言,如C、C++、Objective-C、Fortran等。对于Android开发者来说,它提供了查看和修改程序状态、设置断点、单步执行等功能,极大地提高了调试效率。 ...