当我试图获取代码的pdg时,我收到此无效符号错误,没有行号来寻求帮助。 任何人都可以提出这个错误的含义吗?请注意,代码使用g ++编译和运行 问题是如何获得此错误的确切行号。
执行命令:
frama-c -continue-annot-error -kernel-verbose 3 -no-annot -no-frama-c-stdlib -cpp-command " /usr/bin/g++ -iquote../../inc -std=c++11 fPIC -Wno-write-strings -Wno-narrowing -gdwarf-3 -o test.o -c" -pdg -pdg-dot test -pdg-print test.cpp
错误讯息:
[kernel] computing the AST
[kernel] parsing
[kernel] Parsing FRAMAC_SHARE/libc/__fc_builtin_for_normalization.i (no preprocessing)
[kernel] Parsing /usr/local/share/frama-c/libc/__fc_builtin_for_normalization.i to Cabs
[kernel] Parsing /usr/local/share/frama-c/libc/__fc_builtin_for_normalization.i
[kernel] Converting /usr/local/share/frama-c/libc /__fc_builtin_for_normalization.i from Cabs to CIL
[kernel] Parsing test.cpp (with preprocessing)
[kernel] Parsing /tmp/test.cppe1a338.i to Cabs
[kernel] Parsing /tmp/test.cppe1a338.i
/tmp/test.cppe1a338.i:1:[kernel] user error: Invalid symbol
[kernel] user error: stopping on file "test.cpp"
that has errors.
[kernel] Frama-C aborted: invalid user input.
答案 0 :(得分:2)
Frama-C旨在分析 C 代码,而不是 C ++ 代码。这是两种不同的语言,除非你编写普通的C(注意一些在两种语言中看起来语法相似的结构实际上都有不同的语义),Frama-C无法解析你的"use strict";
var eight = parseInt('010', 8),
nine = parseInt('011', 8),
ten = parseInt('012', 8),
eleven = parseInt('013', 8);
console.log(eight, nine, ten, eleven);
文件。
此外,正如Anne在评论中所提到的,您提供的test.cpp
不正确:您已经要求-cpp-command
提供二进制文件,而Frama-C期待预处理C.事实上,您的日志中提到了错误行:g++
,但这是没有意义的,因为/tmp/test.cppe1a338.i:1:
是二进制文件。使用适当的test.cppe1a338
(例如Frama-C默认为您提供的那个),Frama-C将找到-cpp-command
注释,这将允许它在原始文件中的适当位置报告任何错误中间结果。