【问题标题】:Strange "inaccessible value" in debugger调试器中奇怪的“无法访问的值”
【发布时间】:2013-05-29 05:57:26
【问题描述】:

谁能解释一下这个屏幕:

如您所见,我有一个简单的数组 - 当我使用 A[0]、A1... 时,调试器会显示其元素的值 但我无法使用 local 变量 A[i] 获取元素(但“i”的值显示正确)

项目设置
调试信息:开启
本地符号:ON
优化:关闭

项目(一个 PAS 文件)已构建,因此 DCU 是新鲜的。您可以在该屏幕上看到该测试项目的几乎完整代码,因此不可能在其他单元等中声明数组 A 或“i”...

现在我检查了 - Delphi XE3 中的相同代码完美运行 - 调试器显示所有值。 看来XE4在基本功能上有一个严重的bug :-((

【问题讨论】:

  • 检查 A[i] 手表的属性并尝试在那里设置“允许函数调用”。只是向天空射击。
  • 尝试添加j:integer 变量,将j := i 添加到循环体中并改为观看A[j]。看到我变灰而且我看不到任何其他原因,这很奇怪(XE2 用户),除了它是循环变量。顺便说一句,开启优化,会有帮助吗?
  • 请发布您的“项目选项”窗口,选择“编译器”项,以便我们看到完整的配置。
  • High(A) 返回什么?我不确定High 如何与关联数组一起使用,但High(A) 是否有可能返回最大值,而不是最高键?如果是这样,它可能正在尝试访问A[2],并且无法访问
  • 我试图在旧版本的 Delphi 中重现并且有一些可能的行为......尽管在我的上下文中,优化是 ON。我想将您的完整配置(选择“编译器”的“项目选项”窗口)与我的@rafal-chlopek 进行比较。

标签: delphi debugging delphi-xe4


【解决方案1】:

它不起作用,因为 'val' 是一个函数而不是变量。双击被监视的项目并检查属性“允许函数调用”。

【讨论】:

  • 从 OP 发布的代码中可以清楚地看到,“val”是名为“TSome”的记录的整数子元素(即:确实是变量),A 是该记录的数组.因此, A[i].val 指向的是一个整数变量,而不是一个函数……
【解决方案2】:

i 是一个 var,这个 var 需要一个数量,例如将 i 更改为 1 并检查它;

A[1].val;

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多