Translate

Показ дописів із міткою debug. Показати всі дописи
Показ дописів із міткою debug. Показати всі дописи

субота, 3 серпня 2013 р.

Debug with Strace

Іноді програма не працює як необхідно: незрозуміло які вона читає налаштування чи сегфолтиться в самий непідходящий момент. Саме тому, коли необхідної інформації недостатньо в системних логах, буває корисно скористатись якимось простим деббагером і strace гарно виконує цю роль.

Strace - трасувальник системних викликів і сигналів, інакше кажучи деббагер, котрий здатний виводити результати в системний термінал. Працює в ОС Linux та деяких Unix-системах. Робота програми можлива завдяки системному виклику ptrace ("process trace") в ядрі ОС.

Для початку його необхідно його установити:

# apt-get install strace

Розпочнемо з найбільш простого прикладу: перевіримо, які системні виклики з'являються при запуску команди ls

$ strace ls
 execve("/bin/ls", ["ls"], [/* 49 vars */]) = 0
brk(0)                                  = 0x6ef000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa60c3a3000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=147033, ...}) = 0
mmap(NULL, 147033, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa60c37f000
close(3)                                = 0
....
write(1, "8154c50c.jpg\t\t   Desktop\t\t\t  fil"..., 618154c50c.jpg  Desktop  films out.log  walls
) = 61
close(1)                                = 0
munmap(0x7fa60c3a2000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?