Strace: как отладить неверный аргумент - PullRequest
2 голосов
/ 12 июня 2011

Я пишу программу на python для монтирования файловой системы fuse с помощью системного вызова mount с использованием ctypes. Теперь он дает неверный аргумент ошибки при монтировании системного вызова. Я проверил все аргументы, и они кажутся правильными. Я слышал от друга, что strace можно использовать для устранения ошибок такого типа. Может кто-нибудь подсказать мне, как использовать strace для устранения проблемы. Любая помощь будет оценена. Заранее спасибо.

Позвольте мне сделать вопрос более общим, как я могу использовать strace для отладки той же проблемы в языке C *.

1 Ответ

1 голос
/ 12 июня 2011

Использование strace довольно просто, но оно может не дать вам нужную информацию.

Поскольку вы знаете, какой системный вызов вы ищете, самое простое будет сделать:

strace -fv -e trace=mount mount /dev/sda1 /tmp

(замените mount /dev/... скриптом Python).-f должен следовать за детьми (вероятно, здесь нет необходимости), -v для многословия, а -e trace=mount дает команду strace отслеживать только системный вызов mount.

Пример вывода здесь:

$ sudo strace -fv -e trace=mount mount /dev/sda1 /tmp
mount("/dev/sda1", "/tmp", "ext2", MS_MGC_VAL, NULL) = 0

Таким образом, вы видите аргументы, переданные по существу в форме, что они достигнут ядра, и код возврата.

Вы не получите «объяснения» EINVAL, хотя, но это должно происходить только тогда, когда параметр источника имеет недопустимый суперблок, поэтому сообщение довольно явное (если вы не делаете что-то более экзотическое, в этом случае есть другие возможности, перечисленные здесь ).

...