lldb - 如何杀死卡在无限循环中的命令

Posted

技术标签:

【中文标题】lldb - 如何杀死卡在无限循环中的命令【英文标题】:lldb - How do I kill commands stuck in infinite loops 【发布时间】:2013-07-01 10:49:17 【问题描述】:

简单的问题,但我似乎无法在网上任何地方找到答案,这真的很令人沮丧。

假设我正在尝试调试这个错误代码:

int myBug()

    while(1);
    return 0;

如果我使用 LLDB 进行调试并输入 print myBug(),我永远不会得到任何结果(没有意外)。然而,这意味着我不能再调试,因为 LLDB 被卡住并且不能continue。有没有办法杀死print myBug() 命令?到目前为止,唯一的解决方法是退出并重新启动所有内容 - 非常不方便。

我在 Xcode 4.6.1 中使用 LLDB,我尝试了一堆按键,如 Ctrl+C、Ctrl+T,但似乎没有任何效果:(

【问题讨论】:

我刚刚按下暂停键。 @H2CO3:试过了,不行。 @HotLicks 没有暂停按钮。只有一个播放按钮,点击它完全没有任何作用。 如果是播放按钮,那么您的代码已经停止。 作为一种解决方法,您可以使用活动监视器退出该进程,或者使用终端,使用kill -3 pid 【参考方案1】:

是的,在 Xcode 中没有简单的方法可以中断这个表达式的计算。如果您使用命令行 lldb,control-C 将按预期工作。您可以向您的进程发送信号killall -INT appname。您可以给 lldb 一个表达式评估超时,以微秒表示,因此调用 myBug() 的五秒超时看起来像

(lldb) expr -t 5000000 -- myBug()
error: Execution was interrupted, reason: breakpoint 1.1.
The process has been returned to the state before expression evaluation.
(lldb)

如果这是您的工作流程中出现的问题,您可以通过 http://bugreport.apple.com/ 在 Xcode 上提交有关此问题的错误报告。

【讨论】:

以上是关于lldb - 如何杀死卡在无限循环中的命令的主要内容,如果未能解决你的问题,请参考以下文章

如何从循环外部杀死无限循环中的pthread?

Python:如何杀死无限循环?

C - 用来显示所有接口的pcap_findalldevs卡在了一个无限循环中。

是否有可能在Java中拥有无限循环的Thread和JFrame?

Apache Spark:从IDE远程运行作业时的无限循环

如何打破 C 中的无限 for(;;) 循环?