执行特定命令时内核堆栈跟踪

时间:2011-07-06 11:09:27

标签: linux debugging kernel

在键入#ifconfig 10.0.0.10这样的命令时,可以看到内核中所有“可能”的打印。

我知道类似echo t> / proc / sysrq-trigger将为您提供有关系统中运行的进程的堆栈跟踪。 我感兴趣的是,关于“特定命令”,我如何获得执行的内核函数(堆栈跟踪)?

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

感谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

你的问题的答案是“ftrace”。它不是一个工具,不是命令,而只是内置于大多数现代Linux内核中的内核功能。

例如,在这里你可以使用ftrace来理解如何实现交换空间(参见下面所示的所有执行的关键函数及其在pastebin文件中的顺序):

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 :(得分:1)

strace ifconfig 10.0.0.10 up将显示ifconfig调用的所有系统调用,但不会进入内核的调用