Strace:如何调试无效参数错误

2 投票
1 回答
2325 浏览
提问于 2025-04-16 19:25

我正在写一个Python程序,想通过调用mount系统函数来挂载fuse文件系统。我现在遇到了一个问题,调用mount时出现了无效参数的错误。我检查过所有的参数,感觉都没问题。我有个朋友告诉我,可以用strace来调试这类错误。有人能教我怎么用strace来解决这个问题吗?任何帮助都非常感谢。提前谢谢大家。

让我把问题说得更广泛一些,我想知道如何在C语言中使用strace来调试同样的问题。

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 的“解释”,这个错误通常是因为源参数有一个无效的超级块,所以这个信息是相当明确的(除非你在做一些更复杂的事情,那样可能会有其他的情况,具体可以参考 这里)。

撰写回答