首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用XCode 6.1 C++调试模式检查所有局部变量

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

Stack Overflow用户
提问于 2014-12-31 11:29:02
回答 2查看 1K关注 0票数 4

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

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

或者如何在LLDB上打印出那些丢失的变量?我试过使用po test,但它显示:

代码语言:javascript
运行
复制
error: use of undeclared identifier 'test'

我最好切换到用于C++的Eclipse IDE吗?

顺便说一句,我正在使用CMake生成XCode项目,所以我可能在调试模式中遗漏了什么?我记得如果用的是gcc,我需要-g选项,当我使用CLang的时候,我需要吗?

EN

回答 2

Stack Overflow用户

发布于 2014-12-31 13:25:08

从代码完成和突出显示的角度来看,Xcode在编码c++方面工作得相当好,在我看来仅次于Visual Studio,但通过Apple lldb进行调试将是非常不确定的。模板将是最糟糕的,你经常会得到无法实现目标的错误,或者其他与调试器相关的令人恼火的陈旧错误,对你所要求的东西感到困惑,或者找不到函数。

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

您可能也不会有更好的使用eclipse的时间,并且您将在代码完成、分析、静态分析等方面做出大量牺牲。

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

票数 1
EN

Stack Overflow用户

发布于 2015-01-10 06:30:02

如果你得到了"undefined identifier“错误,这可能是因为编译器没有发出变量的调试信息。即使在-O0中,编译器也不会为不使用的变量发出调试信息。所以,如果你所拥有的是:

代码语言:javascript
运行
复制
int test = 0;

而且你永远不会引用test (例如,将它传递给一个函数或给它赋值),编译器很可能不会为它发出调试信息。这对朗和gcc来说都是真的。

注意,lldb有两种查看局部变量的方法。"p“命令运行完整的表达式解析器,可以做很多奇妙的事情(访问在当前作用域中不可见的变量和类型,等等)。但在某些情况下,它可能会在杂草中传播。

另一个命令是"frame variable“,它只打印当前作用域中的所有局部变量。您也可以执行"frame variable test“来查看本地命名的test。这个命令只是直接从调试信息中提取本地变量,所以虽然它不能用于调用函数等,但它是非常可靠的。

试一试,如果测试出现在"frame variable“输出中,但是"p”没有显示它,那么如果可以,请将您的示例错误提交到bugreporter.apple.com,我们很乐意看看。

如果它也没有出现在"frame variable“中,那么可能是编译器生成的调试信息有问题。如果你有一些你正在使用的本地代码,并且你正在-O0上编译,那么它应该会在调试信息中显示出来。如果不是这样的话,如果你有一个例子来说明这一点,你可以让它变得可用,如果你能提交一个bug就太好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27715763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档