如何使用 XCode 6.1 C++调试模式检查所有局部变量
How to inspect all local variables using the XCode 6.1 C++ debug mode
我正在使用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 进行编译,那么它应该显示在调试信息中。 如果不是,并且您有一个示例显示了这一点,您可以再次提供,如果您可以提交错误,那就太好了。
- valgrind-hellgrind与泄漏检查的结果不同
- 在编写自己的流运算符时,如何检查当前的 ostream dec/hex 模式?
- 使用访问者模式检查派生类类型?
- 双检查锁模式 - 捕获在lambda中传递给call_once
- Boost upgrade_lock和DCLP(双重检查锁定模式)
- 双重检查和锁定模式在c++(而不是11)中有效吗
- 我的双重检查锁定模式实现是否正确?
- 这是否可以兑换线程安全的双重检查锁定模式
- 如何检查可执行文件或 DLL 是否在发布或调试模式下生成 (C++)
- 如何使用 XCode 6.1 C++调试模式检查所有局部变量
- 通过双重检查锁定模式实现call_once
- 如何检查两种类型是否具有相同的位模式和类型
- 如何检查双精度的位模式是否在 C++11 constexpr 中0x0?
- 检查序列中的位模式
- 在Release模式(c++)下对迭代器进行绑定检查
- 用于检查整数是否包含给定十六进制模式的c++代码
- 如何检查Win32中使用c++的窗口句柄是否在管理模式下运行
- c++正则表达式模式检查文件扩展名
- 这种在C++11中实现双重检查锁模式(DCLP)是否正确
- 有没有办法检查istream是否以二进制模式打开