簡體   English   中英

Frama-C語法錯誤?

[英]Frama-C syntax error?

我有一個要在其上運行pdg-dot的入口點,但是將頭文件移動到正確的位置后,出現此語法錯誤。

gtkwin.c:77:[kernel] user error: syntax error

在源代碼中,該行只是GdkPixmap聲明。 如何獲得Frama-C現在創建我的.dot文件?

這是我的命令和輸出:

frama-c -main pt_main -pdg -pdg-dot ptmain gtkwin.c 
[kernel] preprocessing with "gcc -C -E -I.  gtkwin.c"
gtkwin.c:77:[kernel] user error: syntax error
[kernel] user error: skipping file "gtkwin.c" that has errors.
[kernel] Frama-C aborted: invalid user input.

它應該只在我的函數中運行並創建.dot文件。 我嘗試僅注釋掉該行,但仍然以某種方式收到相同的語法錯誤。

您有機會在Unix上使用PuTTY的gtkwin.c嗎? PuTTY的gtkwin.c 77行也是GdkPixmap *pixmap;

您可能會看到“用戶錯誤:語法錯誤”,因為C文件未完全預處理,或者可能存在Frama-C無法識別的某些語法。 例如,當我在Mac OS 10.10.4上嘗試以下命令時:

CPP="gcc -E `pkg-config --cflags gtk+-2.0 gdk-2.0` -I/opt/X11/include -I/usr/include -I. -Icharset -Iunix" \
frama-c -kernel-msg-key pp -no-cpp-gnu-like -main pt_main -pdg -pdg-dot ptmain unix/gtkwin.c

(請注意,我必須注釋掉#include <gdk/gdkx.h>因為我的GTK +構建使用的是石英后端而不是X11后端。)

我得到:

[kernel] Parsing unix/gtkwin.c (with preprocessing)
/usr/include/sys/qos.h:124:[kernel] user error: syntax error
[kernel] user error: stopping on file "unix/gtkwin.c" that has errors.
[kernel] Frama-C aborted: invalid user input.

在上面的frama-c命令中,我添加了frama-c -kernel-msg-key pp frama-c此選項使您可以查看內核使用的預處理命令。 使用-kernel-msg-key pp ,您應該在frama-c輸出中看到類似以下的frama-c

[kernel:pp] preprocessing with "..."

運行引號中列出的命令,然后將預處理的輸出重定向到一個臨時文件。 使用預處理器添加的行號信息,您將需要在預處理輸出中找到相應的行。 在我的情況下,線124 /usr/include/sys/qos.h對應行9896預處理輸出的:

enum { QOS_CLASS_USER_INTERACTIVE __attribute__((availability(macosx,introduced=10.10))) = 0x21, QOS_CLASS_USER_INITIATED __attribute__((availability(macosx,introduced=10.10))) = 0x19, QOS_CLASS_DEFAULT __attribute__((availability(macosx,introduced=10.10))) = 0x15, QOS_CLASS_UTILITY __attribute__((availability(macosx,introduced=10.10))) = 0x11, QOS_CLASS_BACKGROUND __attribute__((availability(macosx,introduced=10.10))) = 0x09, QOS_CLASS_UNSPECIFIED __attribute__((availability(macosx,introduced=10.10))) = 0x00, }; typedef unsigned int qos_class_t;

我可能會看到“用戶錯誤:語法錯誤”消息,因為無法識別__attribute__((availability(macosx,introduced=10.10)))語法。 實際上,一旦在CPP命令中添加-D '__attribute__(...)='以刪除所有屬性,我就會看到不同的錯誤:

/usr/include/sys/_types/_sigset_t.h:30:[kernel] user error: redefinition of 'sigset_t' in the same scope. Previous declaration was at FRAMAC_SHARE/libc/__fc_define_sigset_t.h:25
unix/gtkwin.c:143:[kernel] warning: Calling undeclared function GDK_DISPLAY. Old style K&R code?
unix/gtkwin.c:1766:[kernel] warning: Calling undeclared function GDK_ROOT_WINDOW. Old style K&R code?
unix/gtkwin.c:2636:[kernel] warning: Calling undeclared function GDK_WINDOW_XWINDOW. Old style K&R code?

我正在使用Frama-C Sodium-20150201。


TL; DR嘗試查看預處理的輸入文件。

因此,我運行了沒有-no-cpp-gnu-like的預處理和Frama-C命令。 這似乎使我更深入地解釋了為何Frama-C無法在該文件上運行,盡管除了告訴我要報告錯誤外,我還是很難理解。 這真的是我需要報告的錯誤還是常見的Frama-C標志? 這是我嘗試運行Frama-C時的轉儲。

[kernel] /* compiler builtin: 
[kernel]    void *__builtin_frame_address(unsigned int);   */
gtkwin.c:77:[kernel] user error: syntax error
[kernel] Current source was: /usr/share/frama-c/libc/__fc_builtin_for_normalization.i:43
[kernel] The full backtrace is:
[kernel] Raised at file "cil/src/frontc/frontc.ml", line 127, characters 10-29
[kernel] Called from file "cil/src/frontc/frontc.ml", line 86, characters 13-38
[kernel] Called from file "cil/src/frontc/frontc.ml", line 140, characters 13-32
[kernel] Called from file "src/kernel/file.ml", line 913, characters 6-23
[kernel] Called from file "src/kernel/file.ml", line 1049, characters 23-30
[kernel] Re-raised at file "src/kernel/file.ml", line 1055, characters 52-55
[kernel] Called from file "list.ml", line 84, characters 24-34
[kernel] Called from file "src/kernel/file.ml", line 1046, characters 6-495
[kernel] Called from file "src/kernel/file.ml", line 1933, characters 12-30
[kernel] Called from file "src/kernel/file.ml", line 2017, characters 4-27
[kernel] Called from file "src/kernel/ast.ml", line 103, characters 2-28
[kernel] Called from file "src/kernel/ast.ml", line 114, characters 53-71
[kernel] Called from file "src/kernel/boot.ml", line 29, characters 6-20
[kernel] Called from file "src/kernel/cmdline.ml", line 732, characters 2-9
[kernel] Called from file "src/kernel/cmdline.ml", line 212, characters 4-8
[kernel] 
[kernel] Unexpected error (Parsing.Parse_error).
[kernel] Please report as 'crash' at http://bts.frama-c.com/.
[kernel] Your Frama-C version is Fluorine-20130601.
[kernel] Note that a version and a backtrace alone often do not contain enough
[kernel] information to understand the bug. Guidelines for reporting bugs are at:
[kernel] http://bts.frama-c.com/dokuwiki/doku.php?id=mantis:frama-c:bug_reporting_guidelines

在其上方是一堆更多的編譯器內置警告,不確定是否需要幫助理解輸出。 似乎預處理可以修復一些錯誤,但不是我需要的。

暫無
暫無

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

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