确定Linux中代码的判断参数

时间:2013-05-08 06:02:29

标签: linux compilation

我正在为c / c ++ / java代码开发一个在线代码判断软件。

我希望包含用于判断代码的各种参数,即编译时间,执行时间,内存使用情况,就像IDEONE API提供的那样。

如何在LINUX环境中编译/执行代码时提取这些参数?是否有任何特定命令?

还有其他可用于判断代码的参数吗?

2 个答案:

答案 0 :(得分:1)

time命令可以为您提供二进制文件的执行时间。有了它,您可以获得编译时间time gcc code.c或执行时间time ./a.out。对于内存使用,您可以使用valgrindps。使用ps,如果你使用stdin进行输入,它应该很简单。只需启动应用程序,在背景中以特定间隔运行ps,并将输入提供给应用程序。

答案 1 :(得分:1)

判断动词在你的问题中有点奇怪(这可能太不精确了)。也许你的意思是评估

假设评估的源代码是由最近的GCC编译器(即GCC的版本4.7或4.8)编译的,并且您可以参数化(或只是重复)其编译,您可以考虑 扩展&自定义 GCC 编译器以用于评估或指标目的。这可以直接通过GCC插件(在C或C ++中痛苦编码),也可以通过MELT扩展(MELT是一种特定于域的语言来扩展和定制GCC)。

你需要做一些工作才能走这条路,因为你需要潜入GCC内部。 MELT probe可以帮助您理解更多Gimple表示(GCC内部)。您还可以尝试使用gcc -fdump-tree-all编译一些示例代码来生成许多转储文件。

所以我们的想法是你需要花费时间(几天,也许几周)来开发MELT扩展(例如在某个文件shiven.melt中)以进行分析,度量和评估,并且你会[重新]编译example.c源代码,例如与

gcc -fplugin=melt \
  -fplugin-arg-melt-extra=shiven \
  -fplugin-arg-melt-mode=shivenanalysis \
  -c example.c

(当然你会添加其他编译器标志,例如-O -I/some/include/dir/ ...)

然后,您可以进行MELT扩展来测量编译代码的某些特性,例如函数数,基本块数,Gimple指令数等。这将在编译时发生。您的MELT扩展程序(在您的文件shiven.melt中)可以是例如在一些数据库中写一些统计数据。

扩展GCC对于C,C ++,Fortran,Ada ....源代码是有意义的,但对Java来说则更少(因为没有人使用GCC来编译Java,即使存在gcj,也因为{{1}可能支持一些旧的Java标准的子集。)

请订阅gcc-melt@googlegroups列表并询问有关MELT的相关问题。在订阅中明确提及您的MELT兴趣(可能是您的问题)。