记录函数调用文件并将此日志文件用作程序代码

时间:2010-01-15 15:19:32

标签: c logging function call

我有一个用C编写的应用程序,通过将它们写入文件来记录我的函数调用。 现在我需要在另一个C-application中重用这些记录的函数调用(这也是记录的原因)。

这个应用程序应该 - 在其他东西旁边 - 完全记录的东西。

例如: MYLOGFILE由第一个应用程序编写

printf("Starting main process w/ pid %d\n", (int)getpid());
    Display *dsp = XOpenDisplay( NULL );

然后第二个应用程序将执行记录的函数调用并从文件中获取。

任何想法如何实现?

2 个答案:

答案 0 :(得分:1)

从本质上讲,您希望生成C代码并执行该代码,对吧?如果是这种情况,您可以检查可用作库的TCC并提供此功能。

当然假设您的平台属于受支持的平台。

那就是说我宁愿避免发出C代码并让另一个应用程序读取它,编译它并执行它。我会建议你以下之一:

  1. 发明自己的语言并在日志文件中发出。然后为该语言编写一个解释器,并使另一个程序读取并解释日志文件。

  2. 在第二个程序中嵌入脚本语言(即Lua)并以该语言发出日志文件。

  3. 哪种解决方案最有效取决于您必须在日志文件中描述的任务的复杂性。

    作为最后一个解决方案,假设您想要发出C,您可以考虑使用system()来调用您的编译器而不是编译的程序。但我真的不鼓励你这样做!

答案 1 :(得分:0)

听起来你正在构建某种复制机制。节点A执行操作1到N,然后您希望在节点B上复制这些相同的操作。

这里有很多选项,但它们都分为两类:

选项1:以现有实用程序可以使用的格式写入日志文件。如果您使用的是JavaScript或其他具有“eval”功能的语言,那么这将非常简单。您只需将JavaScript写入节点A上的日志文件,然后从节点B“eval”它。

您提供的示例日志反映了这种方法,尽管对您来说会有点复杂,因为C没有“eval”功能。基本上,您必须将日志文件从节点A发送到B,编译它并将其与库或其他实现C日志使用的函数的C模块链接,然后运行生成的程序。您可以将日志文件包含在如下模板中,将日志文件转换为完整的C源文件:

int main(int argc, char *argv[]) {
    // Do your setup stuff here.
#include "/path/to/the/log/file"
    // Clean up.
    return 0
}

选项2.创建一个解析器,在其他程序的上下文中解析和执行日志。

在这种情况下,由于您的日志语句看起来像C,因此您基本上是在编写C语言解释器。