如何在objc类的init中设置lldb断点

我正在调查在何处制作/显示错误配置的警报控制器

  

由于未捕获的异常“ NSGenericException”而终止应用程序,   原因:“您的应用程序提供了一个UIAlertController   ()的样式   UP.BVTabBarViewController的UIAlertControllerStyleactionSheet   ()。 modalPresentationStyle   具有此样式的UIAlertController的一个是UIModalPresentationPopover。   您必须通过以下方式为此弹出窗口提供位置信息   警报控制器的popoverPresentationController。您必须提供   sourceView和sourceRect或barButtonItem。如果这   当您显示警报控制器时,信息未知,您   可以在UIPopoverPresentationControllerDelegate方法中提供它   -prepareForPopoverPresentation。

天真的,我已经尝试过了:

(lldb)  br s -n "-[UIAlertController init]"
Breakpoint 100: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

正确的(工作)方式是什么?

xx362973618 回答:如何在objc类的init中设置lldb断点

除非您做的完全错误,否则所有警报控制器都是通过调用创建的

+[UIAlertController alertControllerWithTitle:message:preferredStyle:]

但是,实际上并不需要此断点,并且它不会帮助您,因为除非您召唤引起问题的特定警报,否则您不会遇到该断点。相反,只需在全局代码中搜索.actionSheet并修复未配置为弹出窗口的代码即可。

规则是,在iPad上,必须为所有操作表明确指定源视图或源栏按钮项,以使箭头指向;当您进入未为此执行的操作表时,将会立即显而易见。

,

要提供更通用的答案,您可以针对任何课程:

br s -r '-\[UISomeClass init'
br s -r '\+\[UISomeClass '

第一个方法在以init开头的任何方法上创建一个断点。第二个匹配所有类方法,并为每个方法创建断点。

在一种情况下,两种方法都无法覆盖:超类方法。也许不必担心UIAlertController,但是通常只能在类实现的方法上设置断点,而不能在继承的方法上设置断点。

本文链接:https://www.f2er.com/3167068.html

大家都在问