Unexpected extra byte occurring in binary logcat entry stream

by Hal » Tue, 23 Nov 2010 14:53:24 GMT

Sponsored Links
 I've been implementing a logcat reader in java which uses the binary
output of logcat (-B switch) rather than the text based formats. My
code works for many of the entries, but frequently the binary log
entries have an extra byte inserted which I can't account for, making
the payload the wrong size.

program itself and the logging apis, the binary format seems to be:

Header (20 bytes total):
[payloadlength]  2 bytes
[unused padding] 2 bytes
[PID]            4 bytes
[Thread ID]      4 bytes
[time seconds]   4 bytes
[time nanosecs]  4 bytes
[payload]        payloadlength bytes

Payload section of the header is (payloadlength bytes total):
[log priority]            1 byte
[null terminated tag]     unknown length, < payloadlength
[null terminated log msg] unknown length, < payloadlength

This file defines the struct: 
 http://www.google.com/codesearch/p?hl=en #2wSbThBwwIw/include/cutils/logger.h&l=15

The extra byte I'm seeing occours after the nanosecond timestamp and
before the log priority of the payload. e.g. Here is a hex dump of one
of the log entries with the phantom byte:

The byte (in this instance) is 0x1D at offset 0x14
0000:0000 | 2E 00 0D 0A  C0 7C 00 00  00 9A 00 00  00 EC BA E5  4C
| ....|.......L
0000:0011 | EB E8 AA 1D  03 4B 65 79  67 75 61 72  64 56 69 65  77 |
0000:0022 | 4D 65 64 69  61 74 6F 72  00 68 61 6E  64 6C 65 57  61 |
0000:0033 | 6B 65 57 68  65 6E 52 65  61 64 79 28  32 36 29 00     |

The extra byte shifts the payload by 1, so the payload length becomes
incorrect. I can't see where this byte is coming from.

I also tried the LogReceiver class in ddmlib, but that also fails to
handle extra byte and produces garbage after it hits an entry with the
extra byte:
 http://www.google.com/codesearch/p?hl=en #cZwlSNS7aEw/sdk/ddms/libs/ddmlib/src/com/android/ddmlib/log/LogReceiver.java&sa=N&cd=2&ct=rc

Here is a quick python script which demonstrates the problem. It reads
and prints binary log entries in the expected format. It will raise an
exception when it encounters an entry with an unexpected byte:

The logcat program itself successfully reinterprets the binary format
without jumping through any hoops, so I can only guess it's some kind
of struct alignment artifact. Anyone encountered this or got any idea
why the extra byte is appearing?


Re: Unexpected extra byte occurring in binary logcat entry stream

by fadden » Wed, 24 Nov 2010 08:54:15 GMT



I noticed that you have 0D 0A, suggesting that something is doing a
text conversion (CR or LF --> CRLF).


Sponsored Links

Other Threads

1. error: Error: No resource found that matches the given name ()

Use android:layout_above="@+id/flyobject instead.

The + denotes forward lookup.

Thanks and Regards,
Kumar Bibek


2. how fo I Terminate TranslateAnimation earlier and immediately start a FrameAnimation at the position where the TranslateAnimation has been terminated


Thanks for reading my post.

How can I terminate TranslateAnimation before its reach the
destination and immediately start a FrameAnimation at the position of
which the TranslateAnimation has been terminate.

What I am trying to do is to apply a translate animation on textview,
and make TextView more across the screen. I can click on screen (at
any where but not necessarily on TextView) any time to terminate the
translate animation earlier and start a frame animation at the
position where the translate animation has been terminated, e.g
loading a fireworks frame animation.

I am new to android, can some one help please.

Many thanks


3. Image viewers on android phones not always the best experience?

4. make application should support all versions and screens

5. Howto pass pointer to char parameter to kernel via copy_to_user()

6. Gunggu MOD Froyo NoSense Cyanmogen Nightly N1 for EVO - new features

7. Help With AlarmManager Please?