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

发布于 2024-11-18 11:36:53 字数 237 浏览 1 评论 0 原文

当输入像 #ifconfig 10.0.0.10 up 这样的命令时,是否可以看到内核内所有“可能的”打印。

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

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

谢谢。

while typing a command like #ifconfig 10.0.0.10 up is it possible to see all "possible" prints inside kernel.

I know something like echo t > /proc/sysrq-trigger will give you stack trace with respect to processes running in a system.
What I am interested in is, with respect to a 'specific command' how can I get the kernel functions(stack trace) that gets executed?

I know about debuggers like kgdb,but I am interested in quick ways like sysrq methods if any.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

债姬 2024-11-25 11:36:53

你的问题的答案是“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 客户端。

The answer to your question is "ftrace". It is not a tool, not a command, but just a kernel feature built into most modern linux kernel.

For example, here you can use ftrace to understand how swap space are implemented (see all the key functions executed and its sequence inside the pastebin files indicated below):

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

Read this carefully and you can see there are many ways of using ftrace (one is dump kernel stack trace which you requested, another is identifying executed function flow):

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

If you don't want to use ftrace, another option is to use QEMU: installing Linux inside the qemu guest is needed, and it is a lot more powerful, as you can use gdb to step through every lines (in C source code) or assembly.

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

Just in case you want to google further, this is called "kgdb", or gdbserver, and outside the qemu you are running a gdb client.

虐人心 2024-11-25 11:36:53

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

tail -f /var/log/kern.log should display any interaction that occurrs in the kernel.
It is more or less an equivalent to the dmesg command.

晨光如昨 2024-11-25 11:36:53

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

strace ifconfig 10.0.0.10 up will show all system calls called by ifconfig, but will not get inside kernel's calls

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文