RFC: path display and path filtering features.
Grant Edwards
grant.b.edwards at gmail.com
Mon Feb 14 20:44:29 UTC 2011
Attached is a patch against 4.5.20 that adds two new command line
options:
-y Attempt to display paths associated with file descriptor
arguments.
-P <pathlist>
Display only system calls accessing one of the paths in the
specified colon-separated path list.
The features above depend on added code that attempts to track the
state of the traced process's fd table based on the observed
open/close/dup/clone system calls. Another approach would be to do a
readlink() on /proc/<pid>/fd/<fd> every time we handle a system call
with a file descriptor argument. I decided against the readlink()
approach in order to avoid the additional overhead and to provide a
workable solution on systems that don't have /proc/<pid>/fd links
available.
The attached code does use the "readlink() on /proc" mechanism to
initialize the fd state when attaching to an already-running pid, but
after that it maintains fd/path info based on observed open/close/dup
system calls. This implies that the new features may be of limited
use when attaching to an already-running process on a system that
doesn't have /proc/<pid>/fd/<fd> links.
While the attached patch currently meets all of my requirements, there
are areas where it would need to be improved before it could be
merged into the repository:
1) Support for non-Linux OSes isn't done yet. For example, the
handling of the clone system call where it is determined whether
to copy or share the descriptor state assumes the OS is Linux.
2) It is assumed that TRACE_DESCRIPTOR means arg[0] is a file
descriptor, and that TRACE_FILE means arg[0] is path. That's not
100% accurate, but so far it's close enough for all of my use
cases.
3) The code that tracks fd table state is invoked even if paths are
neither being displayed nor filtered-upon. That means that the
handling of a few system calls (e.g. open/close/dup) takes
slightly longer than it needs to in the cases where neither of the
two new options is being used.
4) I have no idea how portable the readlink() on /proc/<pid>/fd/<fd>
mechanism is, or if there are alternative mechanisms for other OSes.
5) The indentation needs to be fixed. I ran all the sources through
indent in order to get them consistent before I started work, and
the attached diffs were done after everything was re-indented.
6) There are probably some more obsure ways to associate an fd with a
path that I haven't caught (for example, the fcntl DUPFD operations).
7) Though descriptors with the close-on-exec flag set aren't handled
properly, the path will get replaced when the child process does
associate a new file with the file descriptor.
If, with some additional work, the new options would be accepted, then
I'd be happy to work on addressing these (or other) issues.
OTOH, if nobody else is interested in the new features (and I'm going
to have to maintain my own fork/patchset) then there's no point in me
doing anything further since the current patchset meets all of my
requirements.
Thoughts?
--
Grant
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pathtrace.patch
Type: application/patch
Size: 30918 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20110214/0eaf42f2/attachment.bin>
More information about the Strace-devel
mailing list