Идентификация файла, вызывающего зависание от strace
У меня есть программа GTK, работающая на Ubuntu 10.04, которая зависает в прерываемом состоянии, и я хотел бы понять вывод strace
. В частности, у меня есть такая строка:
read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
Я подозреваю, что 5
- это дескриптор файла, 0x2ba9ac4
адрес в этом файле, который нужно прочитать, и 4096
объем данных для чтения. Вы можете это подтвердить? Что еще более важно, как определить, какой файл программа пытается прочитать? Этот файловый дескриптор не существует в /proc/pid/fd
(вероятно, поэтому программа вешает).
3 ответа:
Вы можете найти, какой файл использует этот файловый дескриптор, вызвав
strace -o log -eopen,read yourprogram
. Затем найдите в файлеlog
интересующий вас вызовread
. Начиная с этой строки (а не с первой строки файла), найдите вверх первое вхождение этого дескриптора файла (возвращаемое вызовомopen
).Например, здесь файловый дескриптор, возвращаемый
open
, равен 3:open("/etc/ld.so.cache", O_RDONLY) = 3
Второй аргумент для
read()
- это просто указатель назначения, он запрашивает чтение из файлового дескриптора 5 и максимум 4096 байт. Смотритена странице руководства Дляread()
.