2

我正在编写一个 python 程序,通过使用 ctypes 的挂载系统调用来挂载 fuse 文件系统。现在它在挂载系统调用中给出了无效的参数错误。我检查了所有的论点,它们似乎是正确的。听朋友说strace可以用来调试这类错误。有人可以指导我如何使用 strace 来调试问题。任何帮助,将不胜感激。提前致谢。

让我把问题说得更笼统一些,我如何使用 strace 来调试 c 语言中的相同问题。

4

1 回答 1

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,但这只会在源参数具有无效超级块时发生,因此消息非常明确(除非您正在做一些更奇特的事情,在这种情况下还有其他此处列出的可能性)。

于 2011-06-12T16:07:09.097 回答