【发布时间】:2020-02-15 23:30:03
【问题描述】:
在 5.2 之前的内核版本中,我使用save_stack_trace_tsk 来检索调用堆栈。
但是这个方法在 Linux kernel 5.2+ 中已经不可用了,我应该用什么?
【问题讨论】:
-
"但是这种方法在 Linux 内核 5.X 中不再可用" - 真的吗? elixir.bootlin.com/linux/v5.1.21/source/arch/x86/kernel/…
-
更正确:该功能仅在特定架构中被删除,x86 也在其中。无论如何,最新的内核似乎有stack_trace_save_tsk,其语义与
save_stack_trace_tsk相似,但它不适用于模块。此外,还有stack_trace_save,可用于模块,但仅适用于当前任务。这两个函数都应该适用于 x86。 -
@Tsyvarev 我需要用
do_each_thread检索所有线程的堆栈,但新函数似乎没有使用task_struct 作为参数 -
是的,
stack_trace_save函数仅适用于当前任务。在我之前的评论中,我错误地引用了函数stack_trace_save_tsk。正确的是kernel/stacktrace.c:137。它包含“有用的”函数定义(而不是关于不支持的警告)。
标签: linux multithreading kernel callstack