You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解读Linux内核栈追踪中的各类输出信息?

Linux内核崩溃调用栈解读疑问解答

先看你给出的调用栈示例:

Call Trace:
 ? show_cpuinfo+0x1/0x3f1
 ? seq_read+0x157/0x435
 proc_reg_read+0x3e/0x60
 __vfs_read+0x1b/0x34
 vfs_read+0x99/0x152
 ksys_read+0x61/0xd2
 __x64_sys_read+0x1a/0x1c
 do_syscall_64+0x60/0x1cb
 entry_SYSCALL_64_after_hwframe+0x170/0x0

针对你的疑问逐一解答:

1. +0x61/0xd2这类后缀的含义

  • 斜杠前的+0x61是指令指针相对于函数符号起始地址的偏移量(十六进制),表示触发问题时程序执行到该函数内的这个位置。
  • 斜杠后的0xd2是该函数的总长度(十六进制字节数),可以用来判断当前执行点在函数中的大致位置(比如接近开头、中间还是末尾)。

2. 栈帧前?符号的含义

?表示内核对这个栈帧的回溯结果不可靠,常见原因包括:

  • 栈空间被破坏(比如缓冲区溢出覆盖了栈帧数据);
  • 该函数编译时没有生成帧指针(如开启了-fomit-frame-pointer优化),导致回溯无法准确追踪;
  • 缺少足够的调试符号,无法确认栈帧的正确性。

除了?,偶尔还会看到!符号,它表示栈帧是通过启发式方法回溯得到的,同样存在准确性存疑的情况。没有符号的栈帧则表示内核可以确定该回溯结果是可靠的。

3. 连续出现两组------------[ cut here ]------------分隔块的原因(已解决)

第一组分隔块是由WARN_ON_ONCE()宏打印的警告级调用栈,属于内核的非致命警告;第二组才是系统最终崩溃时触发的致命错误调用栈。

如果需要将这类严重警告直接触发系统崩溃,可以执行以下命令修改内核参数:

sudo /sbin/sysctl kernel.panic_on_warn=1

内容的提问来源于stack exchange,提问作者Grigory Rechistov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:05:13