调试Android源码时打开ALOGV日志

 20 #undef NDEBUG

 21 #define LOG_NDEBUG   0  //打开LOGV

 22 #include <utils/Log.h>



在.cpp文件中,添加如上语句,即可打开ALOGV。


关于android中log的机制,可以查看其具体文件:

/system/core/include/log/log.h:

 46 /*
 47  * Normally we strip ALOGV (VERBOSE messages) from release builds.
 48  * You can modify this (for example with "#define LOG_NDEBUG 0"
 49  * at the top of your source file) to change that behavior.
 50  */
 51 #ifndef LOG_NDEBUG
 52 #ifdef NDEBUG
 53 #define LOG_NDEBUG 1
 54 #else
 55 #define LOG_NDEBUG 0
 56 #endif
 57 #endif
 58
 59 /*
 60  * This is the local tag used for the following simplified
 61  * logging macros.  You can change this preprocessor definition
 62  * before using the other macros to change the tag.
 63  */
 64 #ifndef LOG_TAG
 65 #define LOG_TAG NULL
 66 #endif


注意这里的“ifndef LOG_TAG”

其实意思就是如果没有定义这个宏,那么进行预处理时,到 #include <utils/Log.h>,就会把这个宏给定义了。把LOG_TAG定义为NULL。

所以,这个宏的管理范围是以编译的模块为单位的。

比如,我要打开Camera.cpp中所有的ALOGV,只要在Camera.cpp这个文件#include <utils/Log.h>之前,加上:

 20 #undef NDEBUG

 21 #define LOG_NDEBUG   0  //打开LOGV

 即可。也就是最上面那一段。


本质上来说,C++的预编译宏的原理,可以理解为在代码编译之前,根据有意义的语句(宏语句)对你的源码进行自动化的处理(宏展开)。

这样来看,就很清楚了。只要找到具体的ALOGI实现的位置,就能很好的理解了。


<think>好的,我现在需要帮助用户在AndroidMedia源码中的FileSource.cpp文件中添加或打印日志。首先,我需要回忆一下Android系统中添加日志的一般方法,尤其是涉及到C++代码的部分。用户可能已经知道一些基本步骤,但需要具体指导如何在FileSource.cpp中操作。 首先,用户提到的FileSource.cpp应该属于Android Media框架的一部分,可能位于frameworks/av/media/libstagefright或者类似的路径下。添加日志通常需要使用Android日志库,比如liblog,并在代码中引入相应的头文件,如<android/log.h>。然后使用ALOGD、ALOGI等宏来输出日志。接下来,我需要确认FileSource.cpp中是否已经包含了必要的头文件。如果没有,用户需要添加#include<android/log.h>。不过,可能更常见的是使用ALOGxxx宏,这些宏可能已经通过其他头文件间接引入,比如在Log.h中定义。需要检查代码中是否已经有相关的日志宏,或者是否需要额外引入。 然后,用户需要在想要打印日志的地方插入ALOGD或ALOGI等语句。例如,在某个函数中,添加ALOGD("FileSource:reading%d bytesat position%lld", size, position);。这里需要注意变量的正确格式说明符,比如对于int64_t类型,应该使用%lld和强转为long long。另外,需要确保链接了liblog库。在Android.bp或Android.mk文件中,检查是否有liblog的依赖。如果没有,需要添加liblog到LOCAL_SHARED_LIBRARIES或者相应的依赖项中。还有一个可能的步骤是修改对应的mk文件以包含日志模块。不过,现代Android源码可能使用Android.bp,所以需要确认如何添加依赖。如果用户遇到编译错误,可能是由于缺少库链接导致的。此外,用户可能需要使用logcat来查看输出的日志。可以建议他们运行logcat命令,并过滤特定的TAG,比如ALOGD中使用的标签,例如FileSource。这样他们可以实看到添加的日志信息。还需要注意,不同的日志级别对应不同的宏,比如ALOGV(详细)、ALOGD(调试)、ALOGI(信息)、ALOGW(警告)、ALOGE(错误)。用户应根据需要选择合适的级别。 最后,用户可能需要重新编译对应的模块,并推送更新到设备上测试。例如,使用mm命令在源码目录下编译,然后adbpush生成的库文件到设备的对应位置,并重启media服务或整个设备以确保更改生效。总结一下,步骤大致为:1.包含头文件;2.插入日志宏;3.确保库链接;4.编译并测试。同,需要注意代码的上下文,确保日志语句放在正确的位置,比如在函数调用的关键点,如readAt、open等函数中添加日志,以跟踪文件操作的情况。</think>在Android Media的`FileSource.cpp`中添加日志,需通过Android NDK的日志接口实现。以下是具体步骤: --- ### **1. 引入日志头文件** 在`FileSource.cpp`文件顶部添加: ```cpp #include <android/log.h> // 引入Android日志库 #define LOG_TAG "FileSource" // 定义日志标签 #define ALOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) ``` --- ### **2. 在代码中插入日志语句** 例如,在`readAt()`函数中添加日志: ```cpp ssize_t FileSource::readAt(off64_t offset, void *data, size_t size) { ALOGD("readAt: offset=%lld, size=%zu", (long long)offset, size); // 打印读取位置和大小 // ...原有代码... } ``` --- ### **3. 修改编译配置** 确保模块的`Android.bp`或`Android.mk`包含`liblog`依赖: ```makefile // Android.bp shared_libs: ["liblog"] // Android.mk LOCAL_SHARED_LIBRARIES += liblog ``` --- ### **4. 查看日志输出** 通过`logcat`命令过滤日志: ```bash adb logcat -s FileSource:D ``` --- ### **关键点说明** - **日志级别**:根据需求选择`ALOGD`(调试)、`ALOGE`(错误)等宏。 - **变量格式化**:`off64_t`需强转为`long long`,`size_t`用`%zu`格式化[^1]。 - **日志标签**:统一使用`LOG_TAG`便于过滤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值