Linux kernel 如何找到特定系统调用错误源于哪个内核函数?

Linux kernel 如何找到特定系统调用错误源于哪个内核函数?,linux-kernel,system-calls,trace,Linux Kernel,System Calls,Trace,当系统调用失败时,它返回一个错误代码。通常,手册页写得很好,仔细阅读已经提供了很好的提示来修复错误 然而,有时错误更为棘手,我希望在内核中找到发送错误的行,理想情况下,使用相关的堆栈跟踪 当程序被卡住时,我知道我可以通过以下方法获得内核端堆栈跟踪: cat /proc/[PID OR TID OF INTEREST]/stacktrace 然而,当它运行并返回一个没有挂起的错误时,这没有什么帮助 当未知函数在给定的系统调用中返回特定错误时,是否有方法获取stacktrace?如果您知道错误代码

当系统调用失败时,它返回一个错误代码。通常,手册页写得很好,仔细阅读已经提供了很好的提示来修复错误

然而,有时错误更为棘手,我希望在内核中找到发送错误的行,理想情况下,使用相关的堆栈跟踪

当程序被卡住时,我知道我可以通过以下方法获得内核端堆栈跟踪:

cat /proc/[PID OR TID OF INTEREST]/stacktrace
然而,当它运行并返回一个没有挂起的错误时,这没有什么帮助


当未知函数在给定的系统调用中返回特定错误时,是否有方法获取stacktrace?

如果您知道错误代码和负责发出错误代码的源文件,则有一个技巧。在该源文件中,在包含后添加块,如#undef EINVAL#define EINVAL u_u行uu(两行),其中EINVAL是您感兴趣的错误代码。重新编译并查看发出错误的文件中的行号。很好的技巧,这将错误代码转换为行号。可能会有一些意想不到的副作用!在这种情况下,我甚至不知道源文件,我也可以尝试和错误,因为没有那么多的候选人。