Трассированием: как отладить сообщение об ошибке недопустимый аргумент
Я пишу программу python для монтирования файловой системы fuse через системный вызов mount с использованием ctypes. Теперь его давая недопустимый аргумент ошибка в системном вызове mount. Я проверил все аргументы, и они кажутся правильными. Я слышал от друга, что strace можно использовать для отладки таких ошибок. Кто-нибудь может подсказать мне, как использовать strace для отладки проблемы. Любая помощь будет оценена по достоинству. Заранее спасибо.
Позвольте мне сделать вопрос более общим, как я могу использовать strace для отладки та же проблема и в языке Си.
1 ответ:
Использовать
strace
довольно легко, но это может не дать вам нужную информацию.Поскольку вы знаете, какой системный вызов вам нужен, проще всего было бы сделать:
strace -fv -e trace=mount mount /dev/sda1 /tmp
(замените
mount /dev/...
вашим скриптом python).-f
должен следовать за детьми (вероятно, ненужными здесь),-v
для многословия и-e trace=mount
инструктируетstrace
отслеживать толькоmount
syscall.Пример вывода здесь:
$ sudo strace -fv -e trace=mount mount /dev/sda1 /tmp mount("/dev/sda1", "/tmp", "ext2", MS_MGC_VAL, NULL) = 0
Итак, вы видите аргументы, переданные по существу в том виде, что они достигнут ядра и кода возврата.
Вы не получите "объяснения"
EINVAL
, но это должно произойти только тогда, когда исходный параметр имеет недопустимый суперблок, поэтому сообщение довольно явное (если вы не делаете что-то более экзотическое, в этом случае есть другие возможности, перечисленные здесь).