Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos OSX:两台机器GDB调试导致频繁挂起_Macos_Osx Mountain Lion_Kernel Extension - Fatal编程技术网

Macos OSX:两台机器GDB调试导致频繁挂起

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年前,当我问及内核调试目标中的单步锁定时,苹果公司没有任

我正在通过以太网使用GDB在运行10.8.5的主机(也运行10.8.5)的目标系统上调试KEXT。在目标系统上,nvram引导参数设置为:

debug=0x115 -v pmuflags=1
但是,即使使用
pmuflags=1
,当我从断点执行单步操作时,仍然会看到调试器挂起。这个问题经常发生,我唯一的解决办法就是重启目标并重新开始


是什么导致了这些挂起?我还能做些什么来阻止它们发生?

我从一位遇到同样情况的开发人员那里发布了这篇文章:

“4年前,当我问及内核调试目标中的单步锁定时,苹果公司没有任何人给出反馈。封锁发生了。其他人也经历过。也许在以太网GDB内核调试会话中,苹果没有一个单独的步骤。当我第一次体验到firewire调试时,我就一直在玩firewire调试,但由于记不清的原因,我放弃了。当谈到OSX上的内核调试时,我已经习惯了更少。”


看起来单步执行gdb还远远不够完美。

是的,单步执行没有那么好。重复的中断/继续/中断/继续等操作也没有那么好。您还会发现,有时您会在另一个线程上结束,因为单步执行创建的断点不区分线程,这使得它无法区分线程在某些情况下,空气是无用的

我发现kdp接口在检查特定执行点的状态时比观察事物的变化更有用。在许多情况下,您可以用kprintf+fwkpfv代替单步执行。哦,您可以在代码中中断调试器,例如在自定义assert()实现中,使用
\uu asm(“int$3”);
就像在用户空间中一样