Strace - утилита для трассировки системных вызовов и сигналов. Часто бывает полезна в задаче определения какие файлы открывает программа за время своей работы, например, где ищет конфиги. На этом функционал не ограничивается, подробности можно посмотреть в странице руководства. Есть практически в любом дистрибутиве Linux.
В ArchLinux можно поставить так:
pacman -S strace
Спользование:
strace -o out.log -f programm
вывод получим примерно такой (сохранен в файле out.log)
8506 execve("/usr/bin/mcedit", ["mcedit"], [/* 35 vars */]) = 0
8506 brk(0) = 0x9511000
8506 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
8506 open("/etc/ld.so.cache", O_RDONLY) = 3
8506 fstat64(3, {st_mode=S_IFREG|0644, st_size=149172, ...}) = 0
8506 mmap2(NULL, 149172, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb80b8000
8506 close(3) = 0
8506 open("/usr/lib/libgmodule-2.0.so.0", O_RDONLY) = 3
8506 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\r\0\0004\0\0\0\354"..., 512) = 512
8506 fstat64(3, {st_mode=S_IFREG|0755, st_size=13057, ...}) = 0
8506 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb80b7000
8506 mmap2(NULL, 8760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb80b4000
8506 mmap2(0xb80b6000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2) = 0xb80b6000
8506 close(3)
...
8506 open("/home/hatred/.mc/ini", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 5
8506 fstat64(5, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
8506 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb79bd000
8506 write(5, "\n[Midnight-Commander]\nshow_backup"..., 2830) = 2830
8506 close(5) = 0
8506 munmap(0xb79bd000, 4096) = 0
8506 open("/home/hatred/.mc/history", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 5
8506 fstat64(5, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
8506 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb79bd000
8506 write(5, "\n[inp \320\241\320\276\320\267\320\264\320\260\321\202\321\214 \320\275\320\276\320\262\321\213\320\271 \320
"..., 3031) = 3031
8506 close(5) = 0
8506 munmap(0xb79bd000, 4096) = 0
8506 write(1, "\33[A\33[37m\33[40m\33[K\n\33[K\n\33[K\n\33[K\n\33[K\n"..., 100) = 100
8506 ioctl(4, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon echo ...}) = 0
8506 open("/home/hatred/.mc/Tree.tmp", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 5
8506 fstat64(5, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
8506 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb79bd000
8506 write(5, "Midnight Commander TreeStore v 2."..., 35) = 35
8506 close(5) = 0
8506 munmap(0xb79bd000, 4096) = 0
8506 rename("/home/hatred/.mc/Tree.tmp", "/home/hatred/.mc/Tree") = 0
8506 rt_sigprocmask(SIG_BLOCK, [INT QUIT TSTP TTIN TTOU WINCH], [], 8) = 0
8506 write(1, "\33[?1l\33>\33[20;1H\33(B\33[m\33[39;49m\r\33[K\r"..., 41) = 41
8506 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
8506 ioctl(4, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon echo ...}) = 0
8506 write(1, "\33[?47l\0338\33[m"..., 11) = 11
8506 rt_sigprocmask(SIG_BLOCK, [INT QUIT TSTP TTIN TTOU WINCH], [], 8) = 0
8506 ioctl(4, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
8506 close(4) = 0
8506 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
8506 write(1, "\33[39;49m"..., 8) = 8
8506 rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTART}, {0x807dbd0, [], SA_RESTART}, 8) = 0
8506 write(1, "\n"..., 1) = 1
8506 select(4, [3], [3], NULL, NULL) = 1 (out [3])
8506 writev(3, [{"<\0\2\0\0\0\240\4+\0\1\0"..., 12}], 1) = 12
8506 select(4, [3], [], NULL, NULL) = 1 (in [3])
8506 read(3, "\1\2\t\0\0\0\0\0\6\0`\4\0\0\0\0\4\0\0\0\0\0\0\0@\\\33\v\0\0\0\0"..., 4096) = 32
8506 read(3, 0x9546ef4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
8506 close(3) = 0
8506 exit_group(0) = ?
тут мы запустили mcedit под управлением strace, видим какие файлы отктывала программа, поиграться параметрами - можно увидеть что и как читала/писала. В случае ошибок - после чего зависла или вылетела.
Программы можно запускать под управлением strace, а можно подключаться к уже запущенным, подробности, как выше говорилось: man strace.
Для Solaris подобная программа зовется truss
согласно этой заметки для IRIX подобная программа - par
Дискуссия