2013-03-28 69 views
0

我有I/O Kit驱动程序:虚拟以太网设备。经过一段时间的工作操作系统挂起,所以看起来像我的司机有一些僵局。

我做下面的步骤:
- 通过FireWire
连接两台MacBook笔记本 - 设置调试环境
- 初始化NMI(通过电源按钮)
- 抢地址 - 通过GDB
连接到目标我的kext
- 创建并加载符号(这是我读过的所有文档中的最后一个点)
迄今为止这么好。在内核恐慌的情况下就足够了。 但在我的情况下,没有内核恐慌,我驻留在处理NMI的线程中。

现在的问题是:如何切换到我的kext的线程?
命令showalltasks给出了所有任务的列表,我的kext可能运行的唯一任务是kernel_task,所以我试图通过showtaskthreadsshowtaskstacks来检查此任务,但找不到与我的代码类似的任何内容。我错过了什么吗?

我将不胜感激任何建议或链接到文档。使用gdb调试kext:死锁

回答

0

好吧,我正在回答我自己的问题。
要使用我的kext代码查看线程,我需要使用我的kext切换到该进程。在我的情况下,它可能会是一个浏览器(因为我的kext是NKE)。

但事实上它并没有帮到我很多。但旧的印刷方法帮助我找到了僵局。所以我的建议是:对于内核恐慌 - 使用调试器,对于死锁 - 使用打印,找到锁定位置并分析代码。

0

我没有直接回答你的问题 - 但是有可能用断点打你的kext代码吗?内核调试的一个常见方法是将机器连接到nmi,连接调试器,在感兴趣的代码中放置一个断点,然后继续执行(continue),然后执行任何所需的操作来达到断点。

+0

感谢您的建议,但它不会帮助:死锁后,我不能继续执行,之前......好吧,通常它可以在一两个小时内正常工作,所以情况并非如此 – cody