プロセスのスタックトレースを表示するには?

プロセスのスタックトレースを表示するには?

私は見たこれ答えはスタックトレースに基づいて見ることができます。

$ 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これは確かに関数名を表します。他のパラメータは何を表しますか? (おそらく0xffffffffff81012b72開始アドレスを指すアドレスsave_stack_trace_tsk+0x22)最も重要なのは、0x40が何を意味するのかです。 0x40は、この特定の関数が占める合計バイト数を表しますか?

ありがとうございます!

ベストアンサー1

その中はsave_stack_trace_tsk+0x22/0x40関数0x22内のオフセットsave_stack_trace_tskであり、0x40関数のサイズですsave_stack_trace_tsk。両方の16進数はバイト単位です。

%pBこれはカーネル実装で使用されるフォーマット指定子拡張の結果ですprintf。関数の終わり(およびサイズ)を決定する方法を含む詳細については、lib/vsprintf.cLinuxカーネルのソースコードを参照してください。kernel/kallsyms.c

これは[<0xffffffff81012b72>]同じsave_stack_trace_tsk+0x22カーネルアドレスですが、生の形式です。

これは常に[<0>]最新のカーネルにあります。これ変化。

おすすめ記事