The other day I learned that Instruments.app can record file system activity on macOS!
strace
is great, but…
One of the things I always use strace
on Linux
for is tracing a process to see, for example, which global config files
it’s reading—it’s so simple, just
strace -- git status 2> trace.log
and then look through the logs to see where it’s looking for files.
For example, I discovered that git
installed via Homebrew
reads out of /home/linuxbrew/.linuxbrew/etc/gitconfig
instead of /etc/gitconfig
this way!
I’m sure you know how frustrating it is to think your program works
one way when it’s actually doing something else entirely…
strace
makes it easy to figure out when your program works
a different way without having to traipse through the program’s source
code.
… but since macOS shipped System
Integrity Protection, I haven’t been able to get the macOS
alternatives like dtrace
or dtruss
to
work.
Instruments.app can trace arbitrary programs!
Using the “Filesystem Activity” instrument in Instruments.app, I can run a program and see all the file system activity the program does!
There is also a “System Call Trace” instrument, but unlike
strace
it doesn’t seem to record arguments and return
values of syscalls—only the File System activity records arguments and
return values for file system syscalls. So it’s not a complete
alternative to strace
but at least it’s better than trying
to figure out how to work around System Integrity Protection.
While I was searching the internet trying to figure out whether Instruments.app could trace file system activity, I also stumbled on this great post:
→ Did you know about Instruments?
It’s full of more great tips!