而像#ifconfig 10.0.0.10一样输入命令可以在内核中查看所有“可能的”打印。在执行特定命令时执行内核堆栈跟踪
我知道类似echo t>/proc/sysrq-trigger会给你关于在系统中运行的进程的堆栈跟踪。 我感兴趣的是,关于'特定命令',我如何获得执行的内核函数(堆栈跟踪)?
我知道像kgdb这样的调试器,但我对如sysrq方法等快速方法感兴趣。
谢谢。
而像#ifconfig 10.0.0.10一样输入命令可以在内核中查看所有“可能的”打印。在执行特定命令时执行内核堆栈跟踪
我知道类似echo t>/proc/sysrq-trigger会给你关于在系统中运行的进程的堆栈跟踪。 我感兴趣的是,关于'特定命令',我如何获得执行的内核函数(堆栈跟踪)?
我知道像kgdb这样的调试器,但我对如sysrq方法等快速方法感兴趣。
谢谢。
回答你的问题是“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源代码中)或装配。
以防万一你想进一步谷歌,这就是所谓的“使用kgdb”,或gdbserver的,和QEMU外面你正在运行一个GDB客户端。
tail -f /var/log/kern.log
应显示内核中发生的任何交互。
它或多或少等于dmesg
命令。
strace ifconfig 10.0.0.10 up
将显示所有的系统调用使用ifconfig调用,但内核调用
您可以在'/ proc//stack'文件中查看进程的内核堆栈。但是我不知道如何在命令运行时记录该文件中的更改。 –
Eugene
你是在谈论获取系统调用的代码流跟踪,即像 - > syscall dispatcher - > ioctl - > device ioctl for socket - > tcp driver - > ...,然后再次返回? –