我正在编写一个 python 程序,通过使用 ctypes 的挂载系统调用来挂载 fuse 文件系统。现在它在挂载系统调用中给出无效参数错误。我检查了所有的论点,它们似乎是正确的。我听 friend 说 strace 可以用来调试这些类型的错误。有人可以指导我如何使用 strace 来调试问题。任何帮助,将不胜感激。提前致谢。
让我把问题说得更笼统一些,我如何使用 strace 来调试 c 语言中的相同问题。
最佳答案
使用 strace
非常简单,但它可能无法为您提供所需的信息。
既然你知道你在寻找什么系统调用,那么最简单的事情就是:
strace -fv -e trace=mount mount /dev/sda1 /tmp
(将 mount/dev/...
替换为您的 python 脚本)。
-f
是跟随 children(这里可能不需要),-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
的“解释”,但这只应该在源参数具有无效 super block 时发生,所以消息非常明确(除非您做一些更奇特的事情,在这种情况下还有其他可能性,如 here 所列)。
关于python - Strace:如何调试无效参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322158/