Android NDK開発ロゴログの印刷不全を解決する方法
Android NDK開発ロゴログの印刷不全を解決する方法
Androidの開発過程で超ロングログ印刷の問題に遭遇する可能性があり、ログが長すぎる場合は一度にLog.d出力はlogcat端末が一部しか印刷されず、後のすべてが印刷されない.具体的な原因は調べられず、出力のキャッシュサイズに関係するはずです.
Javaレイヤで遭遇し、セグメント出力で解決します.最近開発したNDK so発見_android_log_printにもこの問題があります.
NDKの開発時にc++処理もjavaと同じように、ログを分割処理して、直接コードを貼ります
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===============");
}