XCode调试器lldb中断没有错误输出但程序工作正常

时间:2015-02-17 14:59:48

标签: c++ objective-c xcode lldb

我最近在我的项目中遇到了一个奇怪的行为。 它使用Objective-C作为输出,但大多数核心是C ++ 11。许多C ++例程仅在标题内部内联。该应用程序通过berkley套接字与服务器通信。此外,应用程序在模拟器和实际设备上运行良好。我的日志没问题,APP按预期行事......    ...只要我不使用XCode调试器。

调试器总是在我发送保持活动的同一行代码中断。这是由第二个线程完成的。如果我注释掉这一行,它将停在下一行。如果我在方法的开头放置一个return直接,它会在返回时停止(顺便说一下,它是一个内联方法)。如果我注释掉了这个电话,它会在我使用该方法的下一个地方停止。如果我按下继续,APP将按预期工作,直到下一次调用发生。 在日志窗口中只有一个输出(在我的日志之后):

  

(LLDB)

我已经尝试过清理我的应用程序(" ~zibrary / developer / xcode")并重新启动所有应用程序。没有效果。

不幸的是,我找不到用小样本重现问题的方法。

我的问题,有没有人面临类似的问题?有没有办法获取lldb导致停止的信息?

1 个答案:

答案 0 :(得分:0)

我在重新安排代码后发现了问题,因为我认为它可能是调用堆栈的损坏。

这听起来很尴尬,但这是一个断点!问题是,它不可见。每个调试的人都知道在一行中设置断点的情况是你无法设置断点,断点将滑到下一个逻辑位置。此位置始终在您设置的方法范围内。 使用C ++ 11和内联方法调用内联方法,此规则似乎不再牢不可破。断点不在定义和第一个内联方法之间的有效代码区域中。根据首先编译的方法,断点似乎在一些常规代码中移动。清除应用缓存并没有消除断点。不幸的是(当然)lldb并没有告诉你它因你设置的断点而中断。

Jason Molenda写了以下评论,这将有助于其他人面临类似的问题,我在答案中补充说,因为不是每个人都阅读评论:

  

尝试在lldb提示符或线程列表中键入线程信息。这将   告诉你"停止原因"对于每个线程。例如如果你打了一个   断点,它会说。如果我附加到暂停的进程   它会说SIGSTOP。我不知道你会说什么,但可能会   帮助理解正在发生的事情。