Macos OSX:两台机器GDB调试导致频繁挂起
我正在通过以太网使用GDB在运行10.8.5的主机(也运行10.8.5)的目标系统上调试KEXT。在目标系统上,nvram引导参数设置为:Macos OSX:两台机器GDB调试导致频繁挂起,macos,osx-mountain-lion,kernel-extension,Macos,Osx Mountain Lion,Kernel Extension,我正在通过以太网使用GDB在运行10.8.5的主机(也运行10.8.5)的目标系统上调试KEXT。在目标系统上,nvram引导参数设置为: debug=0x115 -v pmuflags=1 但是,即使使用pmuflags=1,当我从断点执行单步操作时,仍然会看到调试器挂起。这个问题经常发生,我唯一的解决办法就是重启目标并重新开始 是什么导致了这些挂起?我还能做些什么来阻止它们发生?我从一位遇到同样情况的开发人员那里发布了这篇文章: “4年前,当我问及内核调试目标中的单步锁定时,苹果公司没有任
debug=0x115 -v pmuflags=1
但是,即使使用pmuflags=1
,当我从断点执行单步操作时,仍然会看到调试器挂起。这个问题经常发生,我唯一的解决办法就是重启目标并重新开始
是什么导致了这些挂起?我还能做些什么来阻止它们发生?我从一位遇到同样情况的开发人员那里发布了这篇文章: “4年前,当我问及内核调试目标中的单步锁定时,苹果公司没有任何人给出反馈。封锁发生了。其他人也经历过。也许在以太网GDB内核调试会话中,苹果没有一个单独的步骤。当我第一次体验到firewire调试时,我就一直在玩firewire调试,但由于记不清的原因,我放弃了。当谈到OSX上的内核调试时,我已经习惯了更少。”
看起来单步执行gdb还远远不够完美。是的,单步执行没有那么好。重复的中断/继续/中断/继续等操作也没有那么好。您还会发现,有时您会在另一个线程上结束,因为单步执行创建的断点不区分线程,这使得它无法区分线程在某些情况下,空气是无用的 我发现kdp接口在检查特定执行点的状态时比观察事物的变化更有用。在许多情况下,您可以用kprintf+fwkpfv代替单步执行。哦,您可以在代码中中断调试器,例如在自定义assert()实现中,使用
\uu asm(“int$3”);
就像在用户空间中一样