web-dev-qa-db-ja.com

Android native ndkの変数のログ値

C++ in Android NDK。

次のようにlogcatにメッセージを出力できます。

__Android_log_write(Android_LOG_INFO, "tag here", "message here");

ここで、testintという整数があるとします。このintの値を印刷するにはどうすればよいですか?

このようなものは住所を表示しますが、値が欲しいです。 C++でこれを行う方法については何も見つかりませんでした。助けてくれてありがとう!

__Android_log_print(Android_LOG_INFO, "sometag", "%p", *test);
48
dorien

データを文字列にフォーマットするsprintfのような構文を使用する__Android_log_printを使用できます。

__Android_log_print(Android_LOG_INFO, "sometag", "test int = %d", testInt);
45
Benoit Duffez

これが私が見た最も簡潔な方法です:

#include <Android/log.h>

#define  LOG_TAG    "someTag"

#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  LOGD(...)  __Android_log_print(Android_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define  LOGI(...)  __Android_log_print(Android_LOG_INFO,LOG_TAG,__VA_ARGS__)

...

// Now you can log very simply like this:
int foo = 42;
LOGD( "This is a number from JNI: %d", foo );

また、Android.mkのログライブラリにリンクしていることを確認してください。

LOCAL_LDLIBS    := -llog
67
Adam

使用可能な可変長ログ印刷機能を利用してください。私自身のコードのために、LogInfo()関数を提供して簡単にします。もちろん、ここで利用できるいくつかのオプションがあります。

void LogInfo(const char *sTag, const char *fmt, ...)
{
  va_list ap;
  va_start(ap, fmt);
  __Android_log_vprint(Android_LOG_INFO, sTag, fmt, ap);
  va_end(ap);
}
13
mah

__Android_log_print()は、フォーマット文字列と可変引数リストを取ります。符号付き整数を出力するために探している形式指定子は「%d」です。そのため、次のようなものが必要です。

int foo = 42;
__Android_log_print(Android_LOG_INFO, "SomeTag", "foo is %d", foo);

フォーマット文字列の詳細については、 sprintf manual をご覧ください。

11
kelnos