Memory ada在运行时在地址处打印数据
在Ada中,有没有一种方法可以在运行时打印特定地址的数据(可能是二进制的)?我有一个变量不知何故“损坏”,因此我无法键入'Image(var)来打印数据。如果您声明这样的变量:Memory ada在运行时在地址处打印数据,memory,ada,Memory,Ada,在Ada中,有没有一种方法可以在运行时打印特定地址的数据(可能是二进制的)?我有一个变量不知何故“损坏”,因此我无法键入'Image(var)来打印数据。如果您声明这样的变量: Debug_View : Whatever_Type_You_Want with Import => True, Volatile => True, Convention => Ad
Debug_View : Whatever_Type_You_Want
with Import => True,
Volatile => True,
Convention => Ada,
Address => Some_Address;
您可以在某些地址读取/调整内存内容
在Ada的早期版本中,您可以这样写:
Debug_View : Whatever_Type_You_Want;
pragma Import (Ada, Debug_View);
pragma Volatile (Debug_View);
for Debug_View'Address use Some_Address;
这正是您需要调试器的事情!你没有说你在使用什么编译器,如果GNAT,那么调试器就是gdb。如果需要,您可以watch
(而且您可以承受性能损失!)在变量更改时停止执行。我希望可以使用调试器,但在我看到错误的硬件中,调试器不可用。(lynxos编译器)它是共享变量吗?如果是这样的话,它可能会被来自外部源的无效数据写入。可能尝试使用'Valid
运算符来诊断它何时损坏?您是否尝试使用Unchecked\u Conversion
将损坏的变量转换为其他类型?编译器通常应该通过简单地假装变量位置的数据具有其他类型来实现未经检查的\u转换
;我认为它通常不会检查变量值的有效性。如果你这样做了,你就不需要关心地址,尽管有办法检查地址上的数据。我们是否也应该给出这些方面的2012年前版本?