Strace: как отладить ошибку неверного аргумента

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

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


person hue    schedule 12.06.2011    source источник
comment
Почему вы не можете просто использовать отладчик Python, который поставляется с IDE, такой как IDLE?   -  person Pwnna    schedule 12.06.2011
comment
Я никогда не использовал IDE, я попробую.   -  person hue    schedule 12.06.2011


Ответы (1)


Использовать 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, но это должно произойти только тогда, когда исходный параметр имеет недопустимый суперблок, поэтому сообщение довольно явное (если вы не делаете что-то более экзотическое, в этом случае есть другие возможности, перечисленные здесь).

person Mat    schedule 12.06.2011