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 - 如何杀死卡在无限循环中的命令的主要内容,如果未能解决你的问题,请参考以下文章
C - 用来显示所有接口的pcap_findalldevs卡在了一个无限循环中。