debugging 如何调试从OSX上的文件打开应用程序?

oymdgrw7  于 2023-02-16  发布在  其他
关注(0)|答案(2)|浏览(138)

我将我的应用程序链接到一个文件扩展名,所以当我双击这些文件时,它会打开我的应用程序。然而,我在这样做时遇到了崩溃,我正在寻找一种方法来中断它,看看出了什么问题。我使用的是Xcode,这是一个OSX应用程序。
你知道吗?

tgabmvqs

tgabmvqs1#

lldb没有“通过打开AppleEvent启动”功能,因此不能直接执行此操作。
但你可以使用lldb的“attach wait”功能,在应用启动初期捕捉应用。你可以在Xcode中这样做:在应用目标的Run模式的Info选项卡中打开“Wait for the executable to be launch”,然后点击Run按钮,进入Finder,双击其中一个文件启动应用。
如果你的系统负载不是很重,lldb通常会在应用启动的早期就停止,通常是在处理open事件之前,Xcode会自动继续运行应用,所以它应该会一直运行到崩溃。
如果由于某种原因lldb没有足够早地附加,请编辑应用程序的main函数,并在最顶部输入:

int go_on = 0;
while(!go_on) {
  sleep(1);
}

这样,您的应用将在处理open事件之前停止启动,从而为lldb提供附加时间。附加后,在调试器中暂停应用,选择包含此main函数的线程和框架,转到lldb控制台并执行以下操作:

(lldb) expr go_on = 1

然后继续。现在您的应用应该完成启动,处理打开事件并崩溃到调试器中。

js5cn81o

js5cn81o2#

作为吉姆回答的补充:如果应用程序通过

- (void)handleAppleEvent:(NSAppleEventDescriptor *)event
          withReplyEvent:(NSAppleEventDescriptor *)replyEvent

你可以像往常一样使用Xcode调试你的应用程序,并在你开始处理那个事件的行上设置一个断点(或者如果它在到达那个点之前崩溃了,就在开始处设置断点)。2设置好后,进入Finder并打开文件。
请注意,双击它将启动默认应用程序,因此如果您的调试版本不是默认版本,您必须选择“打开方式〉其他..."。

相关问题