Android ndk-gdb 调试

Android ndk-gdb 调试

前提:保证NDK环境建立ok,可参考文章“Windwos下Android NDK开发环境搭建

若想在设备上使用,必须取得root权限才可。

注意在/home/用户/.bash_profile中环境变量的配置:

以上配置是为保证编译,调试过程能正确使用相关命令。

接下来以调试android ndk下samples中的hello-jni为例,来阐述调试过程。

由于:

The new NDK has a Windows version of ndk-build, but ndk-gdb is still a
bash script. This doesn't only mean that you need Cygwin to run it, it
also means that everything written in ndk-gdb is written from a Linux
standpoint.

所以,在windows下要用ndk-gdb的话,我们必须安装Cygwin.

如果在Windwos下运行ndk-gdb的话,将会出现如下问题。

值得注意的是,我们还必须在Cygwin中,配置ANDROID_NDK_ROOT这个环境变量,配置方法参见”Windwos下Android NDK开发环境搭建“中所描述。

否则在使用ndk-build会出现如下问题:

awk fatal:Can't open source file ‘/cygdrive/d/android-ndk-r5c/samples/hello-jni/ D:\android-ndk-r5c/build/awk/check-awk.awk' for reading (no such file or directory)
Error:Could not run 'awk' command.Do you have it install properly?

解决方法来自:https://groups.google.com/forum/#!msg/android-ndk/_4JNdY_h558/vdzP-4CkQrUJ

接下来,将按照如下步骤来调试。

1、启动Cygwin Terminal.

2、进入hello-jni的Android工程目录

    $ cd $ANDROID_NDK_ROOT/samples/hello-jni

3、以调试模式构建c/c++程序,目的是生成共享库,.so文件

  $ ndk-build NDK_DEBUG=1

这里我们使用 ndk-build NDK_DEBUG=1 生成带符号表的 .so

或者修改AndroidManifest.xml,设置android:debuggable=true。

注意:从上面执行的结果可看到,除了得到编译的动态共享库,还有Gdbserver和Gdbsetup。如果不是设置为调试模式不会产生这两个文件。

4、生成build.xml文件(用于用ant打包生成apk,见下面的步骤5)

   $ android update project -p . -t android-18   (在cygwin下,$ android.bat update project -p . -t android-18)

 

5、$ ant debug install

注1:如果在构建过程中出现如下错误:

[aapt] invalid resource directory name: C:\Users\Paul\git\XXXXXXXX\bin\res/crunch
在网上找到如下的解决方法:

本人是通过执行“ant clean debug install”来解决以上错误的。
注2:如果没构建的工程,涉及到库工程。则在构建过程中可能会出现类似如下错误:

则需在库工程目录下,为库工程执行“ android.bat update project -p . -t android-18”来生成需要的build.xml文件。

6、启动应用程序的ndk-gdb调试。

如果你要调试的程序没有运行,需使用ndk-gdb --start。

如果你要调试的程序已经在运行了,直接运行ndk-gdb。

$ ndk-gdb --start

 

这时会启动应用,接着就可以使用gdb的命令了。

7、用list或l命令查看C文件的内容.

(gdb) list

可以用list 1,100 或 l 1,100来指定显示源文件的范围。

如果遇到No symbol table is loaded. Use the "file" command.则需使用以下命令加载需要调试的so文件:
 file obj/local/armeabi/libhello-jni.so
8、用break 或 b命令设定断点

(gdb) break 30    //将断点设置在30行

9、查看断点信息
(gdb) info breakpoints

10、使用c或者continue命令继续运行程序。
(gdb) continue   

11、 按返回键再手动重启应用(触发程序运行在断点处),就会停在30行断点处了。(注意:如果停止了应用程序是不行的)

12、为了使程序继续运行下去,执行continue命令。

注:在调试其他native程序时,如果在第10步出现错误:
  出现错误:
  Continuing.
  Warning:
  Cannot insert breakpoint 1.
  Error accessing memory address 0x11a0: Input/output error.
 错误原因:使用ndk-gdb --start 启动程序第一个activity,但是此时so文件并没有被加载。
 解决方法:首先打开程序并使用,在保证so文件已经被使用的情况下,调用ndk-gdb命令调试程序进程。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这些都是 Android NDK 内部的 `Android.mk` 文件。其中,`./android-ndk-r25c/sources/android/native_app_glue/Android.mk` 是用于编译 Native Activity 示例应用程序的 `Android.mk` 文件;`./android-ndk-r25c/sources/android/support/Android.mk` 是包含一些 Android 支持库的 `Android.mk` 文件;`./android-ndk-r25c/sources/android/ndk_helper/Android.mk` 是包含一些辅助函数和类的 `Android.mk` 文件;`./android-ndk-r25c/sources/android/cpufeatures/Android.mk` 是用于编译 `cpufeatures` 库的 `Android.mk` 文件,该库提供了一些 CPU 相关的信息和功能;`./android-ndk-r25c/sources/cxx-stl/llvm-libc++abi/Android.mk` 和 `./android-ndk-r25c/sources/cxx-stl/llvm-libc++/Android.mk` 是用于编译 C++ STL 库的 `Android.mk` 文件,分别对应 libc++abi 和 libc++ 两个 STL 库;`./android-ndk-r25c/sources/third_party/googletest/Android.mk` 是用于编译 Google Test 测试框架的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/shaderc/Android.mk` 是用于编译 Shaderc 编译器的 `Android.mk` 文件,该编译器可以将 GLSL 代码编译成 SPIR-V 代码;`./android-ndk-r25c/sources/third_party/shaderc/libshaderc/Android.mk` 是用于编译 Shaderc 库的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/shaderc/libshaderc_util/Android.mk` 是用于编译 Shaderc Util 库的 `Android.mk` 文件,该库提供了一些辅助函数和类;`./android-ndk-r25c/sources/third_party/shaderc/third_party/Android.mk` 是用于编译 Shaderc 编译器依赖的第三方库的 `Android.mk` 文件,包括 glslang 和 spirv-tools 两个库;`./android-ndk-r25c/sources/third_party/shaderc/third_party/glslang/Android.mk` 是用于编译 glslang 库的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/shaderc/third_party/spirv-tools/Android.mk` 是用于编译 spirv-tools 库的 `Android.mk` 文件;`./android-ndk-r25c/sources/third_party/vulkan/src/build-android/jni/Android.mk` 是用于编译 Vulkan 库的 `Android.mk` 文件。 如果您要在 Android NDK 中编写自己的 `Android.mk` 文件,可以参考这些示例文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值