手表中不存在 Ada83 约束错误 Window

Ada83 Constraint Error not Present in Watch Window

当 运行 这段代码时,我正在查看约束错误。在调试器中,它停在第二行 (Menu_Text...)。我把作业的RHS上的代码放到watch window里,我看不出问题。它的评估完全正确。

     for I in 1..This_Info_Ptr.Child_Menu_Length loop
        Menu_Text  := This_Info_Ptr.Child_Menu_Text_Ptr.all(I-1);
        Menu_State := This_Info_Ptr.Child_Menu_States_Ptr.all(I-1);
        ...

错误是在我为1的时候,我已经确认这段代码在手表上有效window:

This_Info_Ptr.Child_Menu_Text_Ptr.all(I-1)

Child_Menu_Text_Ptr 和 Child_Menu_States_Ptr 指向数组(字符串和枚举),

我一般应该怎么调试呢?我看不出代码有什么问题。但是,我对 Ada 访问类型的熟悉程度有限。 ..._Ptr 变量是访问类型。

我正在使用 GNAT。

您没有显示足够多的源文本来确定发生了什么。 This_Info_Ptr.Child_Menu_Text_Ptr.all是函数还是数组?它的规格是什么?

如果它是一个数组,你应该记住 Ada 允许数组被任何离散类型索引,并且 Ada 中的数组总是知道它们自己的索引边界。

假设被索引的数组都具有相同的维度和相同的索引类型,那么应该使用 'first & 'last'range 属性对它们进行迭代.

长度值的手写控制很可能有错误。 使用内置功能更安全可靠。