2011-07-06 52 views
0

而像#ifconfig 10.0.0.10一样输入命令可以在内核中查看所有“可能的”打印。在执行特定命令时执行内核堆栈跟踪

我知道类似echo t>/proc/sysrq-trigger会给你关于在系统中运行的进程的堆栈跟踪。 我感兴趣的是,关于'特定命令',我如何获得执行的内核函数(堆栈跟踪)?

我知道像kgdb这样的调试器,但我对如sysrq方法等快速方法感兴趣。

谢谢。

+0

您可以在'/ proc//stack'文件中查看进程的内核堆栈。但是我不知道如何在命令运行时记录该文件中的更改。 – Eugene

+0

你是在谈论获取系统调用的代码流跟踪,即像 - > syscall dispatcher - > ioctl - > device ioctl for socket - > tcp driver - > ...,然后再次返回? –

回答

1

回答你的问题是“ftrace”里面不会得到。它不是一个工具,也不是一个命令,而是大多数现代Linux内核的内核特性。

例如,在这里你可以使用ftrace了解如何交换空间实现(查看所有关键功能执行及其引擎收录文件内顺序如下所示):

http://tthtlc.wordpress.com/2013/11/19/using-ftrace-to-understanding-linux-kernel-api/

请仔细阅读本和你可以看到有使用ftrace的许多方面(一个是你的要求,另一个是确定执行的功能流程转储内核堆栈跟踪):

http://lwn.net/Articles/366796/

如果你不想使用ftrace,另一个选择是使用QEMU:在qemu guest中安装Linux是必要的,并且它更强大,因为你可以使用gdb遍历每一行(在C源代码中)或装配。

https://tthtlc.wordpress.com/2014/01/14/how-to-do-kernel-debugging-via-gdb-over-serial-port-via-qemu/

以防万一你想进一步谷歌,这就是所谓的“使用kgdb”,或gdbserver的,和QEMU外面你正在运行一个GDB客户端。

2

tail -f /var/log/kern.log应显示内核中发生的任何交互。
它或多或少等于dmesg命令。

1

strace ifconfig 10.0.0.10 up将显示所有的系统调用使用ifconfig调用,但内核调用