我正在将一个应用程序移植到 macOS,以接管键盘焦点。这是段错误,我在附加 lldb 和运行程序时没有任何问题,直到它在进入崩溃的函数之前遇到断点。
lldb 现在正在等待我单步执行程序,但即使我切换到 Terminal.app,我也无法使用键盘,因为正在调试的程序已接管键盘焦点。
这种情况下如何与lldb交互?
我尝试在 main.cpp 的第一行设置一个新的断点,并确认我在 lldb 中有键盘焦点。
我尝试设置
debugserver
,以便我在另一台计算机上远程附加到该进程:
/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver 192.168.0.100:1234 --attach 1816
我遇到了一个困境,因为我无法直接运行该程序,因为它在我附加到它之前就崩溃了。它已经在 lldb (1817) 中运行,并在崩溃之前设置了断点:
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-1500.0.404.7
for arm64.
Attaching to process 1816...
error: failed to attach process 1816: (os/kern) invalid task - process 1816 is already being debugged by pid 1817
Exiting.
我不喜欢(咳咳,没有双关语)远程调试。
我的偏好是在本地进行调试,并有办法在正在调试的应用程序和 lldb 之间来回切换键盘焦点。
我愿意接受调试在初始化过程中崩溃的应用程序的最有效方法的想法。
解决方案是通过 ssh 进入托管该进程的计算机(例如使用 Termius 之类的应用程序),并在您正在远程终端中调试的应用程序上运行
lldb
。确保以 same 用户身份 ssh 登录。
macOS 中的应用程序将无法接管外部设备(在我的例子中是 iPadPro)的键盘焦点,您将能够单步执行并使用调试器。
请注意,此过程不与远程附加到进程相同。
上述过程类似于在另一台计算机上打开 Terminal.app 窗口。
它通过使用完全独立的键盘解决了这个问题。