Saturday, March 24, 2012

strace umoven I/O error

While using the prebuilt strace binary found from some blog (mentioned in an earlier post), I kept having this annoying error printed to stderr:

ptrace: umoven: I/O error

Initially, I was not sure whether this error is harmless or not, since I was still able to get the trace output properly.

However, on close scrutiny of the trace output, there are some lines that appear cut off, for example,

") = 0

Normally each line would contain a timestamp, the syscall name and arguments (if you specify the timestamp option), but why would some lines appear incomplete as shown above?

I suspect those lines are due to the "umoven errors", since these errors might have caused the timestamp and syscall names not to be printed out properly.

After much searching on the internet, I found that umoven is a utility function in strace that copies memory from the traced process to the strace process. Sometimes, the function might reach the end of a memory page and wander off to a non-existing one, and hence causing the error to be printed. It was suggested that the strace code be modified in order to suppress printing this error. But I think suppressing the error might not be sufficient.

One thing surprising I found is that Android actually comes with strace; it is in /system/xbin. Well, so much for the initial attempt to find an strace binary from somewhere else...

No comments: