簡體   English   中英

Frama-C 中的備用碼分析

[英]Sparecode analysis in Frama-C

抱歉,如果這在某處有詳細說明,我嘗試在 Frama-C 的不同文檔中進行搜索,但沒有走運。

我正在嘗試在我的代碼中進行死代碼消除,但我不明白該工具的結果。 是否有任何文件/文檔可以解釋此插件的工作原理? 我只知道它使用了價值分析的結果。

誠然,Frama-C 網站上的備用代碼頁面有點簡潔。 然而,這部分是由於這個插件中沒有太多參數化的事實。 主要是切片插件的一種特殊形式,其准則是“保留程序結束時的狀態”。

更一般地,切片包括移除對用戶給定標准沒有貢獻的指令(例如在給定點的整個程序狀態、ACSL 注釋的有效性狀態,或者只是程序到達特定指令的事實)。

為了計算這樣的切片,切片,因此備用代碼,確實依賴於 Eva 的結果,主要是為了獲得程序中每個點所涉及的各種內存位置之間依賴關系的過度近似(與 Eva 一樣)(您可能想看看處理依賴關系的Eva 手冊的第 7 章。非常粗略地說,切片將包含在標准中涉及的內存位置的依賴關系的傳遞閉包中(在存在指針和分支的情況下,這個概念形式上定義“傳遞閉包”變得有點復雜,但本質就在那里)。

現在,關於死代碼,有兩點值得注意:

  • 如前所述,Eva 提供了程序行為的過度近似。 對於切片,這意味着即使某些語句在任何具體軌跡中對切片標准沒有貢獻,也可能會保留,但由於過度近似而在抽象軌跡中似乎這樣做。 另一方面,如果一個陳述沒有被包括在內,那么它肯定對標准沒有貢獻。
  • 對於備用代碼,對程序的最終狀態沒有貢獻並不意味着代碼已經死了,而只是它的所有副作用都被進一步的指令掩蓋了。 最簡單的例子如下:
int x;
int main() {
  x = 1;
  x = 2; 
}

這里, x=1對程序的最終狀態沒有影響,只保留x=2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM