【发布时间】:2016-12-21 04:09:04
【问题描述】:
TL:DR
当原始源文件因缺少头文件而导致编译问题(例如未声明的标识符和未知类型)出现 DEPENDENCY 错误时,您能否生成 clang 调试信息(CFGs、PDGs)?这些文件在语法上是正确的。是否有可能将所有未声明的标识符设置为 INT 以进行调试的标志?
我正在使用 Clang 来分析源代码包。通常,我会修改makefile,以便clang使用下面的命令生成调试信息
clang -emit-llvm -g -S -ferror-limit=0 -I somefile some_c_file
但是,这种方法非常注重 makefile,如果开发人员在给定的构建版本中不支持 Clang,我必须弄清楚如何生成调试信息。
这不利于自动化。对于诸如 OpenSSL 之类的东西,它们包含许多文件(标头)和给定平台的自定义配置,这是不切实际的。如果可能,我想抑制或忽略错误,因为我知道正在测试的构建版本的文件在语法上是正确的。
谢谢!
【问题讨论】:
-
我认为这不可能。为了生成代码,编译器需要包含文件中的信息。
-
也许是这样。但是,我希望有人能教我交易技巧。在安全和来源分析方面,要么有一个“交易技巧”,要么有很多安全文件都充满了博洛尼亚。
-
请注意,通常您不需要手动修补 makefile - 一些环境变量,在最坏的情况下,PATH 技巧和适当命名的脚本可以发挥很大作用。像
scanbuild这样的东西大多可以使用 clang 静态分析器自动执行此操作。此外,现在如果它在 gcc 中编译,您通常可以设法让 clang 编译它 - 通常您需要的最糟糕的只是几个定义以使代码认为它是 gcc。最后,还有像 Psyche-c 这样的工具正在开发中,但它们仍处于高度试验阶段。
标签: c clang llvm llvm-clang clang-static-analyzer