2017-08-16 57 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允許你解決所有的安全問題。