我有以下要求:
- 在任何函数的入口和出口处添加文本。
- 不改变源代码,除了从上面插入(所以没有预处理器或任何东西)
例如:
void fn(param-list)
{
ENTRY_TEXT (param-list)
//some code
EXIT_TEXT
}
但不仅在这种简单的情况下,它还可以使用预处理器指令运行!
例子:
void fn(param-list)
#ifdef __WIN__
{
ENTRY_TEXT (param-list)
//some windows code
EXIT_TEXT
}
#else
{
ENTRY_TEXT (param-list)
//some any-os code
if (condition)
{
return; //should become EXIT_TEXT
}
EXIT_TEXT
}
所以我的问题是:有正确的方法吗?
我已经尝试过使用编译器使用的解析器进行一些工作,但是由于它们都依赖于在解析之前运行预处理器,因此它们对我来说毫无用处。
此外,一些不需要预处理器的令牌生成解析器有些无用,因为它们生成令牌的内存映射,然后导致完整的新源代码,而不仅仅是插入文本。
我正在做的一件事是尝试使用 FLEX(或 JFlex),如果这是一个有效的选项,我将不胜感激。;-)
编辑:澄清一点:目的是允许堆栈跟踪之类的东西。我想跟踪每个函数调用,为了遵循调用层次结构,我需要在函数的入口点和函数的出口点放置一个宏。这构建了一个函数调用跟踪。:-)
EDIT2:特定于编译器的选项不太合适,因为我们有许多不同的编译器可供使用,而且许多编译器可能没有得到任何工具的良好支持。