【发布时间】:2017-03-01 03:33:14
【问题描述】:
我在 lldb 中为我安装在我的 MacOS 上的基于 C 语言的应用程序设置了很多断点。断点大多设置在应用程序的同一函数中。但是,第二天我回到应用程序继续处理它,并开始在同一个函数中再次设置断点,出现了一个问题,即中断不是发生在应用程序函数内部,而是发生在其中一个应用程序的底层库,每次我尝试中断函数(即它在底层库中停止)时,它都会一遍又一遍地这样做,而且我无法通过步进来达到所需的功能(每次我步进,它只是在底层库中向前迈进)。
更新:
我在其中设置断点的函数是从信号处理程序中调用的。例如,当我发送一个 SIGINT 信号时,信号处理程序会调用一些函数在应用程序中进行清理,并且我在其中一个清理函数上设置断点。有时,LLDB 在我设置断点的函数中停止 (with stop reason = breakpoint 1.1) ,有时它在底层/包含的事件处理库中停止,stop reason = signal SIGSTOP ,如果是后者,如果我按“c”(继续希望在应用程序中的断点上并在事件处理库之外),只是有时它让我继续到所需的断点,有时它只是说“进程 41524 正在恢复”,我永远无法到达所需的断点。
【问题讨论】:
-
你是使用Xcode设置断点还是命令行lldb?如果是 Xcode,它会缓存断点,但您可以在 Breakpoints Navigator 中禁用它们。
-
如果这是命令行 lldb,它不会在运行之间缓存 lldb 本身,尽管它确实会保持您设置的断点处于活动状态并在每次重新运行程序时重置它们调试。
-
如果你能给出“break list”命令的输出和你意外命中的断点号,也许我们能看到一些有趣的东西?
-
我更新了问题的标题,以解决我在发现它不是缓存相关问题后遇到的问题。
-
@JimIngham 我在答案中发布的解决方案有时有效,但随后又恢复为 OP 中的行为。关于问题可能是什么的任何建议?它再次在底层库中停止。
标签: lldb