如何使用 XCode 6.1 C++调试模式检查所有局部变量

How to inspect all local variables using the XCode 6.1 C++ debug mode

本文关键字:检查 模式 局部变量 调试 C++ 何使用 XCode      更新时间:2023-10-16

我正在使用XCode 6.1调试我的C++代码,我发现即使我使用"所有变量"设置,调试区域中也没有显示一些局部变量。

我想知道如何将这些变量添加到调试列表中?

或者如何在LLDB上打印出那些缺失的变量?我尝试了po test,但它说:

error: use of undeclared identifier 'test'

我是否最好切换到 Eclipse IDE 进行C++?

顺便说一句,我正在使用 CMake 生成 XCode 项目,所以也许我在调试模式下错过了一些东西?我记得如果使用gcc,我需要-g选项,当我使用CLang时需要它吗?

从代码完成和突出显示的角度来看,Xcode 在编码 c++ 方面效果相当不错,在我看来仅次于 Visual Studio,但通过 Apple lldb 进行调试将是非常命中或错过的。模板将是最糟糕的,通常你会收到关于无法实现目标或其他过时、令人愤怒的错误,这些错误与调试器对你要求的内容感到困惑或无法找到函数有关。

不幸的是,在几个版本中都是这样,似乎c ++排在objective-c的第二位,而且它可能也会落后于swift;它可能不会被修复。

你可能不会在 eclipse 上度过更好的时光,你会在代码完成、分析、静态分析等方面牺牲很多。

最好的建议是确保您处于调试模式,这样事情就不会被优化。如果要检查表达式(尤其是涉及模板的表达式),请将其放在局部变量中,优化器将在发布版本中完成其工作,因此不会出现性能问题。现在是21世纪,但不幸的是,有时你只需要使用std::cerr:(

如果收到"未定义的标识符"错误,可能是因为编译器未发出变量的调试信息。 即使在 -O0 处,编译器也不会为未使用的变量发出调试信息。 因此,如果您所拥有的只是:

int test = 0;

然后你永远不会引用测试(例如,将其传递给函数或为其分配一些东西),编译器很可能不会为它发出调试信息。 这适用于 clang 和 gcc。

请注意,lldb 有两种查看局部变量的方法。 "p"命令运行完整的表达式解析器,可以做很多花哨的事情(访问当前范围内不可见的变量和类型等)。 但在某些情况下,它可以在杂草中消失。

另一个命令是"帧变量",它只打印当前范围内的所有局部变量。 您也可以执行"帧变量测试"以仅查看本地命名的测试。 此命令只是直接从调试信息中提取本地变量,因此虽然它不能用于调用函数等,但它非常防弹。

试试看,如果测试出现在"帧变量"输出中,但"p"没有显示它,那么如果可以的话,请在您的示例中提交一个错误以 bugreporter.apple.com,我们很乐意看看。

如果它也没有显示在"帧变量"中,那么这可能是编译器生成的调试信息的问题。 如果您正在使用一些本地,并且您正在 -O0 进行编译,那么它应该显示在调试信息中。 如果不是,并且您有一个示例显示了这一点,您可以再次提供,如果您可以提交错误,那就太好了。