如何转储失败的系统调用的内核堆栈跟踪?

Mir*_*ici 5 linux linux-kernel

这是一个规范问题。我想了解为什么特定的系统调用失败。是否可以显示系统调用的内核堆栈跟踪:

  • 当返回非零或负数时(这取决于系统调用来知道它何时失败,也许我们应该将失败基于errno
  • 当执行到达返回指令时?

尝试使用trace/trace-bpfcc来自bcc-tools(Fedora)/ bpfcc-tools(Ubuntu):

$ sudo /usr/sbin/trace-bpfcc -K 'r::do_sys_open "%llx", retval'&
$ touch /root  # As normal user
15979   15979   touch           do_sys_open      fffffffffffffffe
        kretprobe_trampoline+0x0 [kernel]
        do_syscall_64+0x5a [kernel]
        entry_SYSCALL_64_after_hwframe+0x44 [kernel]
Run Code Online (Sandbox Code Playgroud)

但堆栈跟踪毫无意义。