【发布时间】:2019-09-11 13:36:33
【问题描述】:
我的代码有错误。这个错误并不总是出现,我不知道如何调试它。
错误是:
异常名称:CONSTRAINT_ERROR
消息:myFile.adb:42 无效数据
值 84 不在 0..1 中
引用的行是这一行:
procedure myProcedure (ObjectA : in Ptr_Type;
ObjectB : in out T_Type) is
Begin
ObjectB.BOOL := ObjectA.BOOL; (line 42)
end procedure;
有
-- How myProcedure is called :
varA : aliased T_Type;
varB : aliased T_Type;
-- varA and varB are used many times
myProcedure(ObjectA => varA'Unrestricted_Access,
ObjectB => varB);
-- Where :
type T_Type is record
...
BOOL : Boolean;
end record;
type Ptr_Type is access all T_Type;
似乎代码试图将 84 放入布尔值中,但我不知道如何调试它。
我该怎么办?
编辑:添加更多细节
【问题讨论】:
-
听起来像一个未初始化的变量。在 Linux 上,您可以尝试使用 valgrind/memcheck 运行
-
如果你要问为什么有些代码不能工作,你至少需要向我们展示编译的代码!见minimal reproducible example。就目前而言,您的代码将无法编译,因为在
myProcedure的主体中,您写入了in参数。如果您尝试以正确的顺序显示代码,则显示可编译的代码要容易得多,而不是通过声明向后工作。