【问题标题】:Not able to set breakpoint on some functions in kgdb setup无法在 kgdb 设置中的某些函数上设置断点
【发布时间】:2014-04-22 08:59:05
【问题描述】:

我使用两个虚拟机设置了 kgdb,两者都具有 CentOs 6.4(实际上 kgdb 主机是目标的克隆)。我成功地连接到远程目标并开始调试。我想调试 RAID 驱动程序,特别是 raid456.ko。我的问题是在 gdb 下使用 add-symbol-file 命令加载此 raid456.ko 的符号后,我能够在几个函数上设置断点,但我无法在几个函数上设置断点。例如,我可以在 ops_run_biofill 函数上设置断点,但不能在 ops_run_biodrain 函数上设置断点。两者都是静态函数和 raid5.c 文件的一部分。如果我尝试在 ops_run_biodrain 上设置断点,则会显示:

(gdb) b ops_run_biodrain

未定义函数“ops_run_biodrain”。 在未来的共享库加载时使断点挂起? (y 或 [n])

为什么可以调试的函数很少,为什么有些不能调试?

[编辑]---------- 我进一步调查了这个问题,发现使用 nm 实用程序可以找到某个特定目标文件的任何符号部分的名称和虚拟地址。我在 raid456.ko 上尝试了 nm,发现 ops_run_biofill 函数在 nm 命令的输出中,但 ops_run_biodrain 不在输出中。这是否意味着 ops_run_biodrain 不在 raid456.ko 中?如果是,那么为什么它不是 raid456.ko 的一部分? ops_run_biodrain 未进行任何宏检查。

【问题讨论】:

    标签: c linux debugging linux-kernel kgdb


    【解决方案1】:

    找到问题的解决方案。由于编译优化,很少有符号没有被检测到。禁用 raid 驱动优化后,KGDB 可以检测到这些符号并能够在它们上设置断点。

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多