Android NDK開発ロゴログの印刷不全を解決する方法


Android NDK開発ロゴログの印刷不全を解決する方法
Androidの開発過程で超ロングログ印刷の問題に遭遇する可能性があり、ログが長すぎる場合は一度にLog.d出力はlogcat端末が一部しか印刷されず、後のすべてが印刷されない.具体的な原因は調べられず、出力のキャッシュサイズに関係するはずです.
Javaレイヤで遭遇し、セグメント出力で解決します.最近開発したNDK so発見_android_log_printにもこの問題があります.
NDKの開発時にc++処理もjavaと同じように、ログを分割処理して、直接コードを貼ります
#ifdef __ANDROID__
#define DEBUGPRINT(tag, msg) __android_log_print(ANDROID_LOG_DEBUG, tag, "%s", msg)
#else
#define DEBUGPRINT(tag, msg) fprintf(stdout, "%s/D %s
", tag, msg); #endif inline void DLONGLOG(const char* tag, const char *msg) { const size_t max_len = 60; size_t len = strlen(msg); if (len < max_len) { DEBUGPRINT(tag, msg); return; } DEBUGPRINT(tag, "==============start of long log==============="); int lineNo = 0; char szLine[max_len]; size_t prefixLen = 0; size_t consumed = 0; do { memset(szLine, '\0', max_len); prefixLen = snprintf(szLine, max_len, "line[%d] ---> ", lineNo); strncat(szLine, msg + consumed, max_len - 1 - prefixLen); DEBUGPRINT(tag, szLine); consumed += strlen(szLine) - prefixLen; ++lineNo; } while (consumed < len); DEBUGPRINT(tag, "==============end of long log==============="); }