通过网络设置两机内核调试

Setting up two-machine kernel debugging over network

我想检查调试安装在远程物理机上的内核驱动程序的选项(因为我没有火线)。阅读相关文档,我没有看到任何关于远程物理调试介质的限制,所以我推断 firewire 电缆和无线网络上的 ip 都应该工作。

我认为使用 kdp-remote <machine-ip> 的 lldb 远程连接可以解决问题,但我没有得到任何回应。

然而,从远程 VM 成功,即使 VM 可以位于远程物理机上。

我的 boot-args 配置是 keepsyms=1 debug=0x144 -v

我们在评论中解决了这个问题(下面的第 2 项),但为了后代,这里有一个检查 xnu 内核调试是否不起作用的事项列表:

  1. 目标计算机必须具有通过 PCIe 或 Thunderbolt 连接的物理以太网端口,或者您必须使用直接火线连接(可选择通过 Thunderbolt)。 USB 转以太网适配器无法在目标端工作。客户端机器不那么挑剔,你可以在那里使用wifi或USB以太网。
  2. 该协议使用 UDP,而不是 TCP。你的 lldb 机器上有防火墙 运行ning 可能会阻止 UDP 数据包吗? (您可以尝试在机器未崩溃的情况下使用 nc (netcat) 工具将 udp 数据包从目标发送到客户端。)
  3. 客户端机器上的ARP条目是否正确? arp <target ip> 应该产生目标接口的 MAC 地址。
  4. 崩溃的 Mac 不会响应 ping,仅响应通过 UDP 的 KDP 数据包。所以没有收到 ping 并不意味着什么。
  5. 据我所知,机器在崩溃时不会请求新的 DHCP 租约,所以这应该不是问题所在,但您始终可以尝试设置一个静态 IP 地址以确保万无一失。
  6. 设置boot-args后重启了吗?它们仅在新启动时生效。
  7. 如果 SIP 处于活动状态,您只能从 OS X/macOS 10.11 开始的恢复环境中设置 nvram 变量。您可以 运行 nvram boot-args 验证设置是否卡住。

我个人的建议是尽可能使用FireWire进行内核调试,根据我的经验,这似乎是最快和最可靠的。