【问题标题】:Linux kernel page fault stack backtraceLinux内核页面错误堆栈回溯
【发布时间】:2017-01-29 18:32:34
【问题描述】:

我正在使用 GDB 硬件调试器来调试 Linux 内核驱动程序。有时,会出现缺页异常。
我用 GDB 连接到处理器并尝试回溯。 GDB 只打印页面错误异常后的函数调用,然后打印:

回溯停止:框架没有保存 PC

如何回溯异常之前的函数堆栈?

【问题讨论】:

  • 根据我的经验,当您运行 gdb 时,内核通常会打印堆栈回溯,以响应(n 意外)内核页面错误。我的猜测是 gdb 无法成功导航到堆栈上的异常框架——这与普通的函数调用堆栈框架完全不同。你试过在没有调试器的情况下运行吗?

标签: linux-kernel gdb linux-device-driver


【解决方案1】:

我想说....大部分时间我遇到页面错误 + 递归内核堆栈跟踪,很可能是堆栈溢出问题。

我从 irq_exit() 中发现,它试图获取 curret_task_id 并且任务结构由于堆栈溢出而损坏。因此,转储初始故障转储但 backtrace() 也依赖于当前任务结构并不断命中 page_fault 或某种无意义的回溯.....

启用动态

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 2016-04-05
    • 2015-05-17
    • 1970-01-01
    • 2019-07-05
    • 2016-10-31
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多