2017-08-16 52 views
0

可以知道某个常量的地址是否改变了它,或者Ada对此有所保护?不断改变它在Ada中的价值

我目前正在研究一个大项目,我无法读取项目的所有代码。但我必须调试它的一部分。我有奇怪的麻烦。事实上,我已经改变了我的包中的 My_Var : constant Integer :=1;这个变量的声明(我们称之为My_Package) 然后在项目中完成一些东西(黑盒) 当我在最后执行该代码时,

My_Package.My_Var<=0返回True

我的问题是,可以的东西,知道我的不断变化的ADRESS,或ADA固定样?

PS:我做了(gdb) watch My_Package.My_Var,并没有停止程序,直到我得到我的错误if My_Package.My_Var<=0

PS PS后:我也试图改变我常在function返回一个恒定值,并与消失的bug(但没有帮助我看到变量在哪里被修改) 希望你能帮助我。

谢谢

+0

常数可以映射(具有地址方面)到只读硬件端口。这样的常量通常应该标记为易失性的,以便重新读取(观察硬件状态的任何变化)。这通常适用于嵌入式处理器(MCU)目标......您要处理的目标系统是什么? –

+0

我正在研究应该在嵌入式x86上工作的代码,但我必须使用它Linux x86。 因此,这可能是我的行为(硬件的地址在Linux编译上不对应) –

回答

1

知道常数地址的东西可能会改变它。如果常量存储在(EP)ROM中,或者编译器与操作系统密切合作将其放入可执行文件的只读部分,则会有例外。

一般来说,如果你真的关心足够的工作来完成所需的工作,Ada允许你解决所有的安全问题。