我使用两个虚拟机设置了 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 不受任何宏检查。