2010-03-30 71 views
-1

我们最近下载,安装并编译了gcc-3.0.4代码。 gcc编译器已经成功构建,我们可以编译一些相同的测试cpp文件。我想知道,这样我们增加额外的运行时间调试语句就像我的GCC编译执行二进制应打印下面的语句在日志文件中,我们可以如何修改gcc的源代码:运行时调试

filename.cpp :: FunctionName#linenumber-statement

或我可以通过此定制编译器代码插入的任何其他信息。

+3

GCC 3.0是一个非常旧的版本,3.x系列在很多方面都很差。你为什么不使用更新的东西?另外,如果使用-g标志,编译器已经插入了这类调试信息。 – 2010-03-30 10:12:20

+1

@尼尔,我同意,但“很老”几乎是轻描淡写。根据http://gcc.gnu.org/news.html,3.0.4于2002年2月发布。这不仅仅是古老的,古老的。 – Glen 2010-03-30 10:44:03

+0

@Glen我仍然使用Win2K,所以把它称为古代会有点虚伪:-) – 2010-03-30 10:45:31

回答

2

你看过宏__FILE____LINE__?他们为你做这些而不修改编译器。有关更多信息,请参阅here。我对GCC体系结构的一般理解是,它分为前端(解析器),中间(在特殊中间语言中进行优化)和后端(生成平台相关输出)。所以,为了您的目的,您必须查看后端部分。

+0

我想要锻炼我们如何修改gcc代码以符合我们的要求。插入宏将是痛苦的,因为我们有数百个文件。我们如何修改gcc源代码,以便gcc编译器将一些额外的数据注入到二进制文件中,这些二进制文件可以在执行时收集。 – Prakash 2010-03-30 11:07:23

+0

在您的评论后添加了更多信息。我对此不太了解,但希望它能给你一个出发点。 – 2010-03-30 11:30:13

+0

是否有任何书籍描述我们如何编写gcc和可用功能,如gcov build – Prakash 2010-03-30 11:45:12

0

不要使用像GCC 3.0这样的古老编译器。

使用最近的GCC 4.9(2014年末或2015年1月),您可以自定义编译器,例如,与MELT扩展,这将增加一个新的优化通工作。该通道会在每个Gimple调用语句之前插入一个Gimple语句(希望调用某个调试打印)。

这是一项不平凡的工作(也许是几周的工作)。你需要了解所有的Gimple