c - 绕过C错误生成clang调试信息

标签 c clang llvm llvm-clang clang-static-analyzer

TL:DR

当原始源文件因缺少头文件而存在 DEPENDENCY 错误并导致编译问题(例如未声明的标识符和未知类型)时,是否可以生成 clang 调试信息(CFG、PDG)?这些文件在语法上是正确的。是否有一个标志可以将所有未声明的标识符设置为 INT 以进行调试?

<小时/>

我正在使用Clang来分析源代码包。通常,我修改 makefile,以便 clang 使用下面的命令生成调试信息

clang -emit-llvm -g -S -ferror-limit=0 -I somefile some_c_file

但是,这种方法非常注重 makefile,如果开发人员在给定的构建版本中不支持 Clang,我必须弄清楚如何生成调试信息。

这不利于自动化。对于诸如 OpenSSL 之类的东西,它们包含数十个文件( header )和给定平台的自定义配置,这是不切实际的。如果可能的话,我想抑制或忽略错误,因为我知道正在测试的构建版本的文件在语法上是正确的。

谢谢!

最佳答案

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

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

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

希望这有帮助

关于c - 绕过C错误生成clang调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254948/

相关文章:

xcode4 - LLVM 是 Xcode 4 中的默认编译器吗?

c - 使用 malloc() 在 C 中分配 3D 数组

c - 找到圆上任何弧的长度 - 确认限制在所需的弧上

c++ - llvm 可以发出跳转到函数内给定地址的代码吗?

objective-c - 如何在 Linux 下检查 GCC 对 Objective 2.0 的支持?

c++ - 为什么 Clang 不喜欢 boost::transform_iterator?

llvm - 通过llvm pass识别用户定义函数

c - 使用下标打印文本的不同方法

c - 在文件范围内可变地修改了 'stack'

c++ - 如何使用 Clang 将链接器警告视为错误?