我在FreeBSD内核上测试一个新的驱动程序。
对于有经验的开发人员来说,这可能是微不足道的,但我无法找到解决此问题的方法。
我有一个内核恐慌,当它发生恐慌时,我得到恐慌的回溯。
回溯说,恐慌发生在foo_bar() + 0x94
。如何提取与foo_bar() + 0x94
对应的行?
内核使用调试符号构建。我试过grepping nm kernel
,但它只包含调试符号。
我该怎么做才能找到确切的行号?
答案 0 :(得分:2)
我建议阅读关于内核调试的FreeBSD手册
https://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug.html
详细说明了如何创建核心文件以及如何调用gdb。
答案 1 :(得分:2)
配置crashdumps - 它通常只是将'dumpdev =“AUTO”'添加到/etc/rc.conf并重新启动 - 并且在崩溃和后续重启之后,使用调试器分析转储,如下所示:“kgdb / boot / kernel / kernel /var/crash/vmcore.latest“。 “kgdb”的内容基本上是GDB被破解以支持内核调试; “where”命令应该显示回溯。