通过网络设置两机内核调试
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 内核调试是否不起作用的事项列表:
- 目标计算机必须具有通过 PCIe 或 Thunderbolt 连接的物理以太网端口,或者您必须使用直接火线连接(可选择通过 Thunderbolt)。 USB 转以太网适配器无法在目标端工作。客户端机器不那么挑剔,你可以在那里使用wifi或USB以太网。
- 该协议使用 UDP,而不是 TCP。你的 lldb 机器上有防火墙 运行ning 可能会阻止 UDP 数据包吗? (您可以尝试在机器未崩溃的情况下使用
nc
(netcat) 工具将 udp 数据包从目标发送到客户端。)
- 客户端机器上的ARP条目是否正确?
arp <target ip>
应该产生目标接口的 MAC 地址。
- 崩溃的 Mac 不会响应 ping,仅响应通过 UDP 的 KDP 数据包。所以没有收到 ping 并不意味着什么。
- 据我所知,机器在崩溃时不会请求新的 DHCP 租约,所以这应该不是问题所在,但您始终可以尝试设置一个静态 IP 地址以确保万无一失。
- 设置
boot-args
后重启了吗?它们仅在新启动时生效。
- 如果 SIP 处于活动状态,您只能从 OS X/macOS 10.11 开始的恢复环境中设置
nvram
变量。您可以 运行 nvram boot-args
验证设置是否卡住。
我个人的建议是尽可能使用FireWire进行内核调试,根据我的经验,这似乎是最快和最可靠的。
我想检查调试安装在远程物理机上的内核驱动程序的选项(因为我没有火线)。阅读相关文档,我没有看到任何关于远程物理调试介质的限制,所以我推断 firewire 电缆和无线网络上的 ip 都应该工作。
我认为使用 kdp-remote <machine-ip>
的 lldb 远程连接可以解决问题,但我没有得到任何回应。
然而,从远程 VM 成功,即使 VM 可以位于远程物理机上。
我的 boot-args 配置是 keepsyms=1 debug=0x144 -v
我们在评论中解决了这个问题(下面的第 2 项),但为了后代,这里有一个检查 xnu 内核调试是否不起作用的事项列表:
- 目标计算机必须具有通过 PCIe 或 Thunderbolt 连接的物理以太网端口,或者您必须使用直接火线连接(可选择通过 Thunderbolt)。 USB 转以太网适配器无法在目标端工作。客户端机器不那么挑剔,你可以在那里使用wifi或USB以太网。
- 该协议使用 UDP,而不是 TCP。你的 lldb 机器上有防火墙 运行ning 可能会阻止 UDP 数据包吗? (您可以尝试在机器未崩溃的情况下使用
nc
(netcat) 工具将 udp 数据包从目标发送到客户端。) - 客户端机器上的ARP条目是否正确?
arp <target ip>
应该产生目标接口的 MAC 地址。 - 崩溃的 Mac 不会响应 ping,仅响应通过 UDP 的 KDP 数据包。所以没有收到 ping 并不意味着什么。
- 据我所知,机器在崩溃时不会请求新的 DHCP 租约,所以这应该不是问题所在,但您始终可以尝试设置一个静态 IP 地址以确保万无一失。
- 设置
boot-args
后重启了吗?它们仅在新启动时生效。 - 如果 SIP 处于活动状态,您只能从 OS X/macOS 10.11 开始的恢复环境中设置
nvram
变量。您可以 运行nvram boot-args
验证设置是否卡住。
我个人的建议是尽可能使用FireWire进行内核调试,根据我的经验,这似乎是最快和最可靠的。