Трассированием: как отладить сообщение об ошибке недопустимый аргумент
Я пишу программу 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отслеживать толькоmountsyscall.Пример вывода здесь:
$ sudo strace -fv -e trace=mount mount /dev/sda1 /tmp mount("/dev/sda1", "/tmp", "ext2", MS_MGC_VAL, NULL) = 0Итак, вы видите аргументы, переданные по существу в том виде, что они достигнут ядра и кода возврата.
Вы не получите "объяснения"
EINVAL, но это должно произойти только тогда, когда исходный параметр имеет недопустимый суперблок, поэтому сообщение довольно явное (если вы не делаете что-то более экзотическое, в этом случае есть другие возможности, перечисленные здесь).