`

android如何使用ndk-gdb调试native程序

 
阅读更多

程序中一些逻辑是用C写的,使用jni调用C代码,使用基本的打log的方式很难查看大型数组,了解到android ndk sdk中有个工具叫ndk-gdb可以很方便地对c代码进行调试,使用过程并不顺利,遇到两个错误,耗时一周终于解决。

如果是在windows下,需要安装cygwin。


首先,在cygwin命令行下进入到你工程的根目录下

如果你要调试的程序已经在运行了,直接运行ndk-gdb
如果你要调试的程序没有运行,可以使用ndk-gdb --start
键入ndk-gdb命令,会出现一系列库文件加载的信息,这些库可能会加载失败,不过没有关系
出现<gdb>提示符,输入help命令可以查看一系列命令

使用l命令列出c文件的内容,但是遇到No symbol table is loaded. Use the "file" command.

使用以下命令加载需要调试的so文件:
file obj/local/armeabi/libsearch-algorithm.so

使用list或者l可以查看加载的c文件。

使用b 100,在c文件的第100行设置断点。
使用c或者continue命令继续运行程序。
出现错误:
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x11a0: Input/output error.

错误原因:使用ndk-gdb --start 启动程序第一个activity,但是此时so文件并没有被加载。
解决方法:首先打开程序并使用,在保证so文件已经被使用的情况下,调用ndk-gdb命令调试程序进程。
正确流程:
1.创建一个模拟器或者使用真机运行想要调试的程序,确保so文件已经被加载。
2.在此程序的根目录下调用ndk-gdb,出现gdb提示符。
3.使用l命令,应该可以打印出c文件。
4.使用b 10,可以在c文件的第十行打印断点。
5.使用c命令恢复程序运行。
6.更多操作请参考gdb使用手册。

程序中一些逻辑是用C写的,使用jni调用C代码,使用基本的打log的方式很难查看大型数组,了解到android ndk sdk中有个工具叫ndk-gdb可以很方便地对c代码进行调试,使用过程并不顺利,遇到两个错误,耗时一周终于解决。

如果是在windows下,需要安装cygwin。


首先,在cygwin命令行下进入到你工程的根目录下

如果你要调试的程序已经在运行了,直接运行ndk-gdb
如果你要调试的程序没有运行,可以使用ndk-gdb --start
键入ndk-gdb命令,会出现一系列库文件加载的信息,这些库可能会加载失败,不过没有关系
出现<gdb>提示符,输入help命令可以查看一系列命令

使用l命令列出c文件的内容,但是遇到No symbol table is loaded. Use the "file" command.

使用以下命令加载需要调试的so文件:
file obj/local/armeabi/libsearch-algorithm.so

使用list或者l可以查看加载的c文件。

使用b 100,在c文件的第100行设置断点。
使用c或者continue命令继续运行程序。
出现错误:
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x11a0: Input/output error.

错误原因:使用ndk-gdb --start 启动程序第一个activity,但是此时so文件并没有被加载。
解决方法:首先打开程序并使用,在保证so文件已经被使用的情况下,调用ndk-gdb命令调试程序进程。
正确流程:
1.创建一个模拟器或者使用真机运行想要调试的程序,确保so文件已经被加载。
2.在此程序的根目录下调用ndk-gdb,出现gdb提示符。
3.使用l命令,应该可以打印出c文件。
4.使用b 10,可以在c文件的第十行打印断点。
5.使用c命令恢复程序运行。
6.更多操作请参考gdb使用手册。
分享到:
评论

相关推荐

    android-ndk(android-ndk-r25b-linux.zip)

    Linux用户需要解压“android-ndk-r25b-linux.zip”,将其添加到PATH环境变量中,以便在终端中直接使用ndk-build、ndk-gdb等命令。此外,Linux下的开发环境设置,如编译器配置、交叉编译等,也需要熟悉。 总结来说...

    android-ndk(android-ndk-r23b-windows.zip)

    NDK是Android应用开发中的一个重要组成部分,它允许开发者使用原生代码(如C、C++)来编写部分应用程序,从而利用底层的硬件性能,提高程序运行效率,尤其是在处理图形计算、物理模拟和游戏引擎等高性能需求的场景下...

    android-ndk-r20-linux-x86_64.zip

    Android NDK,全称为Native Development Kit,是Google为开发者提供的一套工具集合,它允许开发者使用C和C++语言进行Android应用程序的开发。NDK的引入,打破了Java作为唯一开发语言的限制,使得开发者能够充分利用C...

    NDK工具android-ndk-r10e-linux-x86_64

    NDK(Native Development Kit)是Android开发中的一个重要工具集,主要用作开发原生代码,如C和C++,以实现高性能、低级系统访问的应用程序。标题中的"android-ndk-r10e-linux-x86_64"表明这是一个特定版本的NDK,即...

    android-ndk(android-ndk-r26b-linux.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的开发工具,它允许开发者使用C++和其他原生编程语言编写应用的部分或全部代码。这个“android-ndk-r26b-linux.zip”文件是NDK的一个...

    android-ndk-r16b-windows-x86_64.zip

    Android NDK(Native Development Kit)是谷歌为Android平台提供的一款用于开发原生代码的应用程序工具集,它允许开发者使用C和C++等低级语言编写部分应用程序,从而提高性能、利用硬件加速等功能。"android-ndk-r16...

    android-ndk-r8c

    1. **C/C++支持**:NDK支持使用C和C++语言编写Android应用程序的本地代码部分,通过JNI(Java Native Interface)与Java代码交互。开发者可以利用C++标准库和STL,提升计算密集型任务的效率。 2. **交叉编译**:...

    android-ndk-master

    1. **调试困难**:相比于Java,原生代码的调试更为复杂,需要使用如GDB这样的原生调试工具。 2. **碎片化问题**:由于Android设备的硬件和操作系统版本差异,需要为不同的架构和API级别构建多个版本的库。 3. **安全...

    android-ndk-r6

    Android NDK(Native Development Kit)是Google提供的一款用于在Android平台上开发原生代码的工具集,它允许开发者使用C++和其他本地语言编写应用程序,从而利用硬件的性能,提高应用的运行效率,尤其是在游戏和高...

    android-ndk-r8dab.zip_NDK_android_android ndk

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用工具,它允许开发者使用C和C++编写部分应用代码,以利用设备的硬件性能或实现更底层的操作。在“android-ndk-r8dab....

    android-ndk-r4b-linux-x86

    Android NDK(Native Development Kit)是Google为Android平台提供的一套工具,它允许开发者使用C/C++编写部分应用程序,以利用原生代码的高性能和低级硬件访问能力。本文将详细探讨Android NDK r4b版本及其在开发...

    android-ndk-r25b-windows.zip

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具集,主要用于处理高性能计算、游戏引擎、C/C++库等需要利用硬件加速或使用底层库的场景。NDK允许开发者在...

    Eclipse+CDT+GDB调试android NDK程序

    在开始使用Eclipse+CDT+GDB调试Android NDK程序之前,首先需要确保已经搭建好以下开发环境: 1. **Ubuntu 11.10**:作为主要的操作系统,用于开发和调试Android NDK程序。 2. **Eclipse 3.7 (Indigo) for Java**:...

    android-ndk-r7

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具。NDK允许开发者使用C和C++编写部分应用程序,从而利用底层硬件性能,提高应用的运行效率,尤其是在处理图形...

    android-ndk-r7-windows

    6. **调试与测试**:使用NDK提供的gdb或者Android Studio的原生调试功能,对C/C++代码进行调试。 总之,Android NDK-r7为Windows用户提供了在Android平台上进行原生代码开发的工具集,让开发者能够充分利用底层语言...

    android-ndk-r5b-windows

    在移动应用开发领域,Android NDK(Native Development Kit)扮演着至关重要的角色。它为开发者提供了在Android平台上使用C和C++编写原生代码的能力,从而实现性能优化、利用硬件加速功能,以及调用已有的C库。本文...

    Eclipse+CDT+GDB调试android_NDK程序

    【Eclipse+CDT+GDB调试Android NDK程序】是一种在Eclipse集成开发环境中,利用CDT(C/C++ Development Tooling)和GDB(GNU Debugger)进行原生代码调试的技术。Android NDK允许开发者在Android应用中使用C或C++编写...

    NDK GDB 翻译

    NDK-GDB是一个用于Android Native Debugging的工具,它于Android r4版本引入,主要目的是简化对使用NDK编译的C/C++代码进行调试的过程。这个工具位于NDK的顶级目录下,需要通过命令行从应用程序的目录或其子目录下调...

    Android-NDK-R501-13概述

    - **调试支持**:NDK提供了调试工具,可以通过GDB进行远程调试,并提供了尽可能多的符号表信息以方便调试本地代码。 - **跨平台工具**:包括编译器、链接器等工具,可以在多种操作系统(Linux、Mac OS X和Windows)...

    android-ndk-r14b-linux-x86-64

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具集,它允许开发者使用C和C++等低级语言编写部分应用程序,以提高性能或利用特定硬件功能。"android-ndk-r14b-...

Global site tag (gtag.js) - Google Analytics