【问题标题】:Corrupted stack/heap under debugger when simulating?模拟时调试器下的堆栈/堆损坏?
【发布时间】:2015-07-03 23:58:26
【问题描述】:

我使用的是 Xcode 6.3.1。我正在尝试跟踪应用程序中的一个奇怪问题,现在我看到局部变量似乎被错误地初始化了。当我在同时定义和初始化局部变量的行处打断点时,它实际上显示为现有局部变量,但值已损坏:

还有其他人看过吗?在另一次运行中,变量实际上在变量视图中显示为 NSDate !!!

【问题讨论】:

    标签: xcode debugging xcode6 ios-simulator breakpoints


    【解决方案1】:

    断点实际上在它出现的行之前;该行尚未执行。因此,您对这个变量的关注为时过早。它没有有意义的价值,直到你踏过去它被初始化的那一行。您仍在该行之前,因此其值是随机垃圾。

    【讨论】:

    • 我很确定在 XCode 更新之前我根本看不到该变量 - 根据您的评论,这是有道理的,因为调试器在执行该行之前停止,并且因此局部变量甚至还没有被定义(即还没有在范围内)。
    • 好的,刚刚尝试了 XCode 6.2,我的问题,调试器也以同样的方式显示变量。现在完全被难住了......
    • "因此局部变量甚至还没有被定义(即尚未在范围内)" 这实际上不是 C 的工作方式。还记得 C 要求所有声明发生在所有可执行语句之前吗?编译器仍在幕后执行此操作。因此,一旦函数启动,所有本地变量实际上都会被声明(即存储被搁置),并且调试器会揭示这一事实。但是直到行指针发生初始化的行之后,本地人才有意义地初始化
    • 是的。一次为多个变量分配堆栈空间会更有效,因此您只是看到了它的副作用。这完全符合其应有的行为。可以想象一种优化,调试器知道该变量尚未声明,因此对开发人员隐藏数据,但 IMO 开发人员工具应该专注于显示数据而不是尽可能隐藏它 =)。
    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2016-03-11
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多