Skip to content
Search

Android:NDK:Debugging

lastmod 2025-02-10created 2016-06-224 edits

How to debug with the Android NDK (Using the NDK plugin).

ADT 20 includes an NDK plugin that provides support for building and debugging NDK projects in Eclipse. This document describes how to install and use the NDK plugin.

Installation

First set the path to SDK and NDK:

  • Eclipse -> Window -> Preferences -> Android -> set path to SDK
  • Eclipse -> Window -> Preferences -> Android -> NDK -> set path to the NDK

Right click on an Android project and select Android Tools -> Add native support.

  • Note that you will not be able to add native support if the project already has C/C++ nature.

At this point, you will be able to build your applications using Project -> Build All. Debugging native applications

  1. Update your build config to include NDK_DEBUG = 1.
  2. Right click project -> properties -> C/C++ Build > Builder Settings > Builder > Build command: ndk-build NDK_DEBUG=1
  3. Set a breakpoint in your C code.
  4. Right click on your project, select Debug As -> Android Native Application

Note: There is a delay of a few seconds between when the activity is launched and when native debugging starts. If your code is already executed by that point, then you won’t see the breakpoint being hit. So either put a breakpoint in code that is called repetitively, or make sure that you call JNI code after you see that ndk-gdb has connected.

Known Issues:

  1. Eclipse does not automatically find the include paths to all the NDK headers on Windows. This issue will be fixed in the next update (20.0.1) when it is released.
  2. Eclipse does not automatically find the include paths with CDT 8.1.0 (Juno). This issue is tracked in Bug 33788.

How to print to LogCat from Android JNI

The logging provided by the android.util.Log class on the Android Java side can also be used on the native side. Usually you define and use a macro named LOGX (X specifies the severity); if it is not defined in your source, define it in the source as follows.

#ifndef __INCLUDE__ANDROID__JNI_LOG_H__
#define __INCLUDE__ANDROID__JNI_LOG_H__

#include <android/log.h>

#define  LOG_TAG    "JNI_LOG_TAG"

#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,   LOG_TAG, __VA_ARGS__)
#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,    LOG_TAG, __VA_ARGS__)
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,    LOG_TAG, __VA_ARGS__)
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,   LOG_TAG, __VA_ARGS__)
#define  LOGV(...)  __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)

#endif // __INCLUDE__ANDROID__JNI_LOG_H__

Then, when building, add the library to the Android.mk file as follows.

LOCAL_LDLIBS := -llog

See also

Favorite site

References


  1. Android_debugging_native_code.pdf ↩

author Zer0 sitemap