我正在從另一家公司繼承的遺留Ada 95項目上工作。我最近將編譯器從Gnat 3.13a1升級到Gnat 4.7.4。該程序仍在編譯,但其中一個任務由於Constraint_Error而崩潰。Gnat編譯器升級導致出現與枚舉相關的Constraint_Error出現
Process_Ua(Buffer, Msg_Kind);
Tr_Log5("MSG KIND IS: " & Message_Received_Type'Image(Msg_Kind));
Constraint_Error發生在上面的第二行,並帶有「無效數據」消息。 Msg_Kind的類型是Message_Received_Type(這是一個枚舉類型),並且在該子程序的開始處它被正確初始化,所以我無法理解如何將任何不是Message_Received_Type的任何內容分配給Msg_Kind會導致發生Constraint_Error。
嘗試在'Tr_Log5'調用之前檢查'MsgKind'或'Message_Received_Type'Pos(Msg_Kind)'的值。 – 2014-09-29 23:44:25
不知道這是否是正確的方法,但我已經使用「Integer'Image(Message_Received_Type'Pos(Msg_Kind))」記錄了您所說的內容。它打印「32」,但Message_Received_Type只有6個可能的值。這怎麼會發生?這個模塊在過去的15年中一直沒有改變,只是在新的編譯器中出現了這個問題。 – Ogre 2014-09-30 00:05:36
恩,你的程序中有一個錯誤?也許問題一直存在,並且問題隱藏了,因爲較舊的編譯器未能引發'Constraint_Error'。這只是我的猜測。你還能訪問舊的編譯器嗎? – 2014-09-30 00:09:59