【问题标题】:Bypass C errors to generate clang debugging information绕过C错误生成clang调试信息
【发布时间】: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


【解决方案1】:

最近我使用 clang-tidy 对我们的一个项目进行源代码分析。该项目使用 GNU 编译器,我们不想离开它。所以我遵循的过程如下:

1)使用bear生成编译数据库即clang-tidy使用的compile_commands.json

2) 绕过我们不想分析的包含文件,方法是将它们包含为系统文件,即使用--isystem 将其包含在内,并使用-I 项目特定文件。 (如果您无法更改 Make 文件,您可以通过简单的查找和替换来更改 compile_commands.json)

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2019-09-24
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多