ALOGVを開くためのAndroidデバッグソースコードの正しい姿勢



Android Debugging Source Code Correct Posture Open Alogv





序文

Android C ++の世界に没頭し、関連するALOGVログで表示する準備をしたところ、logcatに関連するログが見つからないことがわかりました。たぶん、Android ALOGログの知識がある人は、それは受け入れられないと言うでしょう。 ALOGD、ALOGW、およびALOGEは表示されません。これは可能ですが、関連するマクロで制御できないことはあまり友好的ではなく、Androidの元のALOGVが大量に印刷される場合、それらを1つずつ変更することは困難です。この章では、ALOGVの制御メカニズムを完全に理解します。

注:ALOGログ・レベルの優先順位は、次の順序に従います。



ALOGV



1.ALOGV制御関連コード

ALOG関連の定義は、次のようにsystem / core / include / log /log.hにあります。



#ifndef LOG_NDEBUG #ifdef NDEBUG #define LOG_NDEBUG 1 #else #define LOG_NDEBUG 0 #endif #endif /* * This is the local tag used for the following simplified * logging macros. You can change this preprocessor definition * before using the other macros to change the tag. */ #ifndef LOG_TAG #define LOG_TAG NULL #endif #ifndef ALOGV #define __ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) #if LOG_NDEBUG #define ALOGV(...) do { if (0) { __ALOGV(__VA_ARGS__) } } while (0) #else #define ALOGV(...) __ALOGV(__VA_ARGS__) #endif #endif #ifndef ALOGD #define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) #endif #ifndef ALOGW #define ALOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) #endif #ifndef ALOGE #define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) #endif

上記のソースコードから、ALOGVは主にLOG_NDEBUGとLOG_NDEBUGによって制御されており、LOG_TAGを定義しない場合、ヘッダーファイルはデフォルトのNULLを提供することがわかりました。



2.ALOGVログオープニングユニバーサルメソッド

さて、主成分分析が明確であるため、ユニバーサルメソッドについて説明する必要があります。ここでは、接合子プロセスを例として取り上げます。コードパスはframeworks / base / cmds / app_process / app_main.cppにあり、印刷します。 it out zygoteは着信パラメーターを開始し、次のデバッグ情報を追加します。

int main(int argc, char* const argv[]) { ...... if (1) { String8 argv_String for (int i = 0 i < argc ++i) { argv_String.append(''') argv_String.append(argv[i]) argv_String.append('' ') } ALOGV('app_process main with argv: %s', argv_String.string()) } ...... }

ここでは、次のコードをapp_main.cppに直接追加して、すべてのALOGV情報を出力できます。また、同じことを他のモジュールにも拡張できます。



#define LOG_TAG 'appproc' #undef NDEBUG #define LOG_NDEBUG 0

関連する印刷ログは次のとおりです。

06-04 15:39:00.834 2901 2901 V appproc : app_process main with argv: '-Xzygote' '/system/bin' '--zygote' '--start-system-server' '--socket-name=zygote' 06-04 15:39:16.532 3331 3331 V appproc : app_process main with argv: '/system/bin' 'com.android.commands.settings.SettingsCmd' 'get' 'secure' 'bluetooth_address'

結論

さて、Androidデバッグソースコードの正しい姿勢でALOGVを開くために必要なのはこれだけです。最終的な方法は、印刷するC ++モジュールの開始コードの最後に次のコードスニペットを追加することです。これで、すべて問題ありません。

#define LOG_TAG 'appproc' #undef NDEBUG #define LOG_NDEBUG 0