寻找一种轻量级解决方案来系统地检测 C 函数的 if 条件

Looking for a lightweight solution to systematically instrument the if-conditions of C functions

我需要使用轻量级检测工具(例如,使用一些现有的 Python 或者可能是 C 预处理器框架)在 C 函数的 if 条件中系统地插入语句:

例如,设 foo 为 C 函数:

int foo(int x){
   if (x>3) 
        return x;
}

我需要将其转换为

int foo(int x){
   if (x>3){ 
        print ("%d", x); 
        return x;
  }
}

我试过使用 LLVM,但它并没有更好地与代码的其他部分集成。在这里,我更喜欢 Python/C 预处理器框架解决方案。谢谢你的想法。

您可以考虑使用 GCC MELT or perhaps the GCC Python Plugin to customize the GCC 编译器来转换它的 Gimple 表示。这将是一个完整的解决方案,但我不确定它是否符合 "lightweight"(因为您需要了解 GCC 内部细节),但也不是 Clang/LLVM 方法。您可能需要一周以上的工作时间(特别是了解 GCC 或 Clang/LLVM)

的内部结构

顺便说一句,你的问题没有你想象的那么简单,因为

int foobar(int x) { return (x>3)?(x*6):(x*x); } 

包含一个条件。此外,您的原始函数 完全 等同于

int foo(int x){
    while (x>3) // this while is done 0 or 1 time
      return x;
}

而且很容易找到许多其他表达方式。

所以纯粹的句法方法永远不会完全奏效。因此,你不能指望什么 "light".

(我的观点是 C 代码检测绝不是 轻量级问题)