gpt4 book ai didi

ios - 我可以让 iOS 进程等待调试器吗?

转载 作者:行者123 更新时间:2023-12-01 19:43:43 26 4
gpt4 key购买 nike

在测试我的 iOS 应用程序时,我的代码有时会遇到意外情况(精简断言失败),它会向我显示警报,让我知道发生问题的文件和行。

然而,到目前为止,我已经超越了“断言”失败的实际点,所以即使我将 LLDB 附加到进程,也没什么可看的。

有没有办法暂停 iOS 进程,直到我连接了调试器,所以 LLDB 将在故障点正常运行,可以访问调用堆栈、变量等?我不希望应用程序崩溃,就像使用简单的断言一样。

最佳答案

通常这很容易——在你的程序中添加一个busyloop。在 C 术语中,您可能有一个静态文件,例如

static int wait_for_debugger = 1;

然后在你有软断言的时候,
if (bad_condition)
{
while (wait_for_debugger)
sleep (1);
}

当您在应用程序中遇到该条件时,线程将在此时永远等待,直到您附加调试器并执行类似的操作
(lldb) e wait_for_debugger = 0

我在 iOS 应用程序中看到的复杂情况是,如果您的应用程序停止响应事件,SpringBoard 会注意到并认为您的应用程序已挂起并将其终止。如果你在主线程上的事件循环仍在执行你会没事的,但是让另一个线程坐在这个busyloop中可能会导致其他问题。当调试器附加到 iOS 进程时,SpringBoard 知道应用程序停止响应事件是可以的(例如,您可能会在断点处停止)但如果它是免费运行的,我看不到它工作.

另一种选择是一直将调试器附加到应用程序,直到您重现故障 - 但我假设它只是偶尔发生?因此,每次从 Xcode 启动它(或从 Xcode 附加到它)可能需要额外的工作,直到您 repo 失败为止。另一方面,如果您可以使用“始终在调试器下运行”模型,则可以在软断言上使用断点。

关于ios - 我可以让 iOS 进程等待调试器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com