strace报告错误的文件描述符

时间:2016-07-14 12:49:30

标签: linux bash system-calls strace

尝试调试我没有返回bash提示符的程序,我使用了strace并给了它PID。该程序是一个二进制文件,我没有源代码。根据{{​​1}},有一个strace。但是,我不知道哪个文件存在问题。

正如您在-1 EBADF (Bad file descriptor)退出时所见,因此正在运行strace没有结果。

lsof -p <PID>

如何搜索丢失/错误的文件?

3 个答案:

答案 0 :(得分:4)

你要关闭两次相同的文件描述符:

close(5)                                = 0
close(5)                                = -1 EBADF (Bad file descriptor)

答案 1 :(得分:3)

当文件描述符号未映射到文件时,会发生

EBADF。因此,根据定义, 没有文件存在问题。

坦率地说,这不是一个错误,当然也不是你正在寻找的错误。尝试关闭FD是完全常见的行为,即使您不确定它们是否开放 - 这样做比尝试检查文件描述符更有效仍然通过其他方式打开并且只是有条件地关闭它。

答案 2 :(得分:1)

如果您的程序是多线程的,多次关闭文件描述符是一个非常糟糕的主意,因为在您第一次关闭它之后,另一个线程可以调用open()并给予相同的文件描述符(但是引用到另一个文件);此时在线程中第二次调用close将关闭另一个线程的文件。总是使用类似的东西:

关闭(X);   x = -1;

确保您不会无意中关闭重复使用的描述符。