我正在编写一个 python 程序,通过使用 ctypes 的挂载系统调用来挂载 fuse 文件系统。现在它在挂载系统调用中给出了无效的参数错误。我检查了所有的论点,它们似乎是正确的。听朋友说strace可以用来调试这类错误。有人可以指导我如何使用 strace 来调试问题。任何帮助,将不胜感激。提前致谢。
让我把问题说得更笼统一些,我如何使用 strace 来调试 c 语言中的相同问题。
使用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
,但这只会在源参数具有无效超级块时发生,因此消息非常明确(除非您正在做一些更奇特的事情,在这种情况下还有其他此处列出的可能性)。