簡體   English   中英

在Frama-C的Value Analysis日志中抑制[value]消息

[英]Suppress [value] messages in the log of Frama-C's Value Analysis

我想使用Frama-C中的Value插件分析結果(批處理模式)來進一步評估函數中的變量。 但是,輸出似乎很大,有很多[value]標簽,我需要的只是來自[value] ====== VALUES COMPUTED ======的部分[value] ====== VALUES COMPUTED ======每個函數末尾的計算值。 Frama-C是否支持允許我這樣做的選項?

您可能會發現命令行選項frama-c -no-val-show-initial-state -no-val-show-progress …使輸出更符合您的口味。

使用后一個選項時,您可能會感謝-val-print-callstacks ,它會在消息每次發出消息所對應的調用堆棧打印,因為該上下文不再可用於日志中的前一行。

例如,回答時Frama-C的開發版本默認顯示以下消息:

int x;

/*@ assigns x; */
void f(void);

void g(int y) {
  f();
  x += y;
}

int main(void) {
  g(1);
}

使用frama-c -val tc

[value] Analyzing a complete application starting at main
[value] Computing initial state
[value] Initial state computed
[value] Values of globals at initialization
  x ∈ {0}
[value] computing for function g <- main.
        Called from t.c:12.
[value] computing for function f <- g <- main.
        Called from t.c:7.
[value] using specification for function f
t.c:3:[value] warning: no \from part for clause 'assigns x;' of function f
[value] Done for function f
t.c:8:[kernel] warning: signed overflow. assert x+y ≤ 2147483647;
[value] Recording results for g
[value] Done for function g
[value] Recording results for main
[value] done for function main
[value] ====== VALUES COMPUTED ======
[value] Values at end of function g:
  x ∈ [-2147483647..2147483647]
[value] Values at end of function main:
  x ∈ [-2147483647..2147483647]
  __retres ∈ {0}

使用frama-c -val tc -no-val-show-initial-state -no-val-show-progress

[value] Analyzing a complete application starting at main
[value] Computing initial state
[value] Initial state computed
[value] using specification for function f
t.c:3:[value] warning: no \from part for clause 'assigns x;' of function f
t.c:8:[kernel] warning: signed overflow. assert x+y ≤ 2147483647;
[value] done for function main
[value] ====== VALUES COMPUTED ======
[value] Values at end of function g:
  x ∈ [-2147483647..2147483647]
[value] Values at end of function main:
  x ∈ [-2147483647..2147483647]
  __retres ∈ {0}

添加選項-val-show-callstack意味着對於第8行的警報,上下文如下所示:

t.c:8:[kernel] warning: signed overflow. assert x+y ≤ 2147483647;
                  stack: g :: t.c:12 <- main

暫無
暫無

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

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