Linux
如何查看程序的堆棧跟踪?
我已經看到了這個答案,根據 Stack Trace 可以看出:
$ cat /proc/<PID>/stack [<ffffffff81012b72>] save_stack_trace_tsk+0x22/0x40 [<ffffffff81213abe>] proc_pid_stack+0x8e/0xe0 [<ffffffff81214960>] proc_single_show+0x50/0x90 [<ffffffff811cd970>] seq_read+0xe0/0x3e0 [<ffffffff811a6a84>] vfs_read+0x94/0x180 [<ffffffff811a7729>] SyS_read+0x49/0xb0 [<ffffffff81623ad2>] system_call_fastpath+0x16/0x1b [<ffffffffffffffff>] 0xffffffffffffffff
據我猜測,在行
[<ffffffff81012b72>] save_stack_trace_tsk+0x22/0x40
save_stack_trace_tsk肯定是指函式名 其他參數表示什麼?(也許0xffffffff81012b72指向****save_stack_trace_tsk +0x22的起始地址的地址) 最重要的是 0x40 表示什麼?0x40 是否表示該特定函式佔用的字節總數?
非常感謝!
其中
save_stack_trace_tsk+0x22/0x40
,是函式0x22
內部的偏移量,是函式的大小。兩個十六進制數字都以字節為單位。save_stack_trace_tsk``0x40``save_stack_trace_tsk
這是
%pB
核心實現使用的格式說明符擴展的結果printf
:有關詳細資訊,包括如何確定函式的結尾(因此大小),您可以查看 linux 核心原始碼中的lib/vsprintf.c
andkernel/kallsyms.c
。這
[<0xffffffff81012b72>]
是相同的save_stack_trace_tsk+0x22
核心地址,但以原始形式。自從這種變化以來,這總是
[<0>]
在較新的核心中。