我需要在FreeBSD中跟踪我的内核,因为我正在更改调度程序,它在启动时遇到困难,我该怎么做?

时间:2016-02-08 01:01:11

标签: multithreading operating-system kernel scheduling freebsd

我正在修改我的调度程序,它导致它被卡住(因为我无法正确实现它,而且我没有拿起我扔进队列中的东西)。所以我试图看看它到底有多远。我如何将内容写入日志,然后在启动kernel.old

时如何读取该日志

我将我的线程投入到一组新的队列中,而不是传统的3个runq的64个。要遍历并选择一个线程,我正在使用TAILQ_FOREACH。

2 个答案:

答案 0 :(得分:1)

你做错了。

你应该做的是运行这是一个支持调试器的虚拟机管理程序,如qemu或bhyve。然后将gdb附加到启动的内核,并在崩溃时检查状态。

原则上你/可能/有一个你写东西的日志,以及你在启动失败后检索的日志,但我不明白为什么你会这样做。实现这一目标的最简单方法是简单地printf并可能扩展缓冲区的大小,以便您可以容纳更多消息。内核总是将日志放在同一位置并在启动时检查一个幻数,以便它知道它是应该从头开始还是开始追加。然后所述日志在dmesg和/ var / log / messages中可用。但如前所述,不是这样做的方式

答案 1 :(得分:0)

您是否试图进入调试器? https://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug-online-ddb.html

DTrace也可能有用。