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 |
..KeyguardView
0000:0022 | 4D 65 64 69  61 74 6F 72  00 68 61 6E  64 6C 65 57  61 |
Mediator.handleWa
0000:0033 | 6B 65 57 68  65 6E 52 65  61 64 79 28  32 36 29 00     |
keWhenReady(26).

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:
 http://pastebin.com/nvvsBjkZ 

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. How To Programmatically Turn On/Off WIFI?

Hi,

Second question of the day, how do I programmatically turn on/off
WIFI?

Currently I'm having something like this:

                _iWifi.setOnClickListener(new View.OnClickListener() {

                        public void onClick(View v) {
                                WifiManager wm = (WifiManager) 
getSystemService(WIFI_SERVICE);

                                if (!wm.isWifiEnabled()) {
                                        wm.setWifiEnabled(true);
                                } else {
                                        wm.setWifiEnabled(false);
                                }
                        }
                });

Where _iWifi is a button instant (of course...)

Now, the problem is that it tells me there is a Security Exception
occurred, I guess I have no permission to access this.

I'm sure a firmware key is not needed in this case (unlike my previous
question regarding reboot action), so what is the proper way of doing
this?

Please help, thank you in advance :D
--~--~---------~--~----~------------~-------~--~----~

2. Is the limit of memory heap only 6M?

07-01 11:32:02.192: VERBOSE/QualcommCameraHardware(35): state
transition QCS_WAITING_JPEG --> QCS_IDLE
07-01 11:32:02.232: ERROR/dalvikvm-heap(395): 6291456-byte external
allocation too large for this process.
07-01 11:32:02.232: ERROR/(395): VM won't let us allocate 6291456
bytes
07-01 11:32:02.242: DEBUG/AndroidRuntime(395): Shutting down VM
07-01 11:32:02.242: WARN/dalvikvm(395): threadid=3: thread exiting
with uncaught exception (group=0x4000fe70)
07-01 11:32:02.242: ERROR/AndroidRuntime(395): Uncaught handler:
thread main exiting due to uncaught exception
07-01 11:32:02.302: ERROR/AndroidRuntime(395):
java.lang.OutOfMemoryError: bitmap size exceeds VM budget

My app shut down when i load a jpg file,i can avoid it by call
system.gc().But I think memory limit  will be 14M or 16M.
--~--~---------~--~----~------------~-------~--~----~

3. Interesting video on app development (barcode app)

4. Android Dev Phone availability.

5. Reading if the Notification Bar is open?

6. YouTube in the emulator?

7. donut keystore