我有I/O Kit驱动程序:虚拟以太网设备。经过一段时间的工作操作系统挂起,所以看起来像我的司机有一些僵局。
我做下面的步骤:
- 通过FireWire
连接两台MacBook笔记本 - 设置调试环境
- 初始化NMI(通过电源按钮)
- 抢地址 - 通过GDB
连接到目标我的kext
- 创建并加载符号(这是我读过的所有文档中的最后一个点)
迄今为止这么好。在内核恐慌的情况下就足够了。 但在我的情况下,没有内核恐慌,我驻留在处理NMI的线程中。
现在的问题是:如何切换到我的kext的线程?
命令showalltasks
给出了所有任务的列表,我的kext可能运行的唯一任务是kernel_task,所以我试图通过showtaskthreads
和showtaskstacks
来检查此任务,但找不到与我的代码类似的任何内容。我错过了什么吗?
我将不胜感激任何建议或链接到文档。使用gdb调试kext:死锁
0
A
回答
0
好吧,我正在回答我自己的问题。
要使用我的kext代码查看线程,我需要使用我的kext切换到该进程。在我的情况下,它可能会是一个浏览器(因为我的kext是NKE)。
但事实上它并没有帮到我很多。但旧的印刷方法帮助我找到了僵局。所以我的建议是:对于内核恐慌 - 使用调试器,对于死锁 - 使用打印,找到锁定位置并分析代码。
0
我没有直接回答你的问题 - 但是有可能用断点打你的kext代码吗?内核调试的一个常见方法是将机器连接到nmi,连接调试器,在感兴趣的代码中放置一个断点,然后继续执行(continue
),然后执行任何所需的操作来达到断点。
相关问题
- 1. 调试PyThread_acquire_lock死锁
- 2. 使用Windbg's!clrstack命令调试死锁
- 3. 调试数据库死锁
- 4. 调试休眠/ Ehcache死锁
- 5. SQL Server 2000 - 调试死锁
- 6. 如何调试死锁?
- 7. 使用nUnit测试死锁
- 8. 使用pthread互斥锁(linux)调试死锁
- 9. 使用gdb调试回调
- 10. 如何用python调试死锁?
- 11. 用gdb调试
- 12. 使用GDB调试模板
- 13. 使用gdb来调试C++
- 14. 使用gdb调试pthreads
- 15. 使用gdb调试qemu
- 16. 使用gdb调试conio.h
- 17. 如何使用GDB调试
- 18. 使用GDB调试Android
- 19. 使用GDB调试iPhone
- 20. 使用GDB进行调试
- 21. 使用gdb调试Java .jar
- 22. 使用gdb调试llvm pass
- 23. 使用GDB调试进程
- 24. 在Amazon RDS上调试MySQL死锁
- 25. 需要帮助调试互斥死锁
- 26. ActiveRecord3死锁重试
- 27. WCF回调死锁
- 28. 用gdb调试C
- 29. 使用GDB调试iOS应用程序
- 30. 尝试发现死锁
感谢您的建议,但它不会帮助:死锁后,我不能继续执行,之前......好吧,通常它可以在一两个小时内正常工作,所以情况并非如此 – cody