【问题标题】:How to print/log address of a variable in NDK如何在 NDK 中打印/记录变量的地址
【发布时间】:2011-10-25 05:41:24
【问题描述】:

我的 C 语言不是很强,但我现在正在使用 NDK,我需要帮助以十六进制记录变量的地址。我一直在使用__android_log_print 打印通用日志消息,但是如何告诉 C 将变量的地址转换为 char 数组?

【问题讨论】:

    标签: android c logging android-ndk


    【解决方案1】:

    我从未使用过 android NDK,但我假设 __android_log_print 使用 printf 格式字符。在这种情况下,您可以使用%p

    假设我们有一个变量int a = 10;。打印它的地址:

    printf("%p\n", &a); //This will print in hexadecimal
    

    编辑

    接受的答案:

    __android_log_print(SOME_PRIO, "sometag", "%p", &a);
    

    【讨论】:

    • 是的,但是__android_log_print 没有像printf 那样的格式,所以我需要在将地址传递给这个函数之前将其实际转换为字符串。
    • 好的,我快速浏览了文档并认为可以执行类似__android_log_print(SOME_PRIO, "sometag", "%p", &a); 的操作,那么抱歉。
    • 不知道我是怎么错过的。谢谢=)
    【解决方案2】:

    我多次使用 Android NDK,并且在使用原生 logcat 之前尝试过。

    __android_log_print(6, "deneme", "text"); -> this is error message
    typedef enum android_LogPriority {
    ANDROID_LOG_UNKNOWN = 0,
    ANDROID_LOG_DEFAULT,    /* only for SetMinPriority() */
    ANDROID_LOG_VERBOSE,
    ANDROID_LOG_DEBUG,
    ANDROID_LOG_INFO,
    ANDROID_LOG_WARN,
    ANDROID_LOG_ERROR,
    ANDROID_LOG_FATAL,
    ANDROID_LOG_SILENT,     /* only for SetMinPriority(); must be last */
    } android_LogPriority;
    

    并且在c源文件中包含头文件

    #include <jni.h>
    #include <android/log.h>
    

    比makefile看起来像

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := deneme-jni
    LOCAL_SRC_FILES := deneme.c
    LOCAL_LDLIBS    := -llog  
    
    include $(BUILD_SHARED_LIBRARY)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2019-07-30
      • 2011-06-17
      相关资源
      最近更新 更多