取出真正编译到的代码

本文介绍了一种利用strace工具来追踪大型软件工程项目中实际使用的文件的方法。通过跟踪make命令及其子进程对文件的操作,可以找出哪些文件在构建过程中被真正使用到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常一个大型的软件工程,里面包含甚至上GB的文件,然后根据不同的编译选项,实际只会编译到其中的一部分文件。你如何知道那些文件真正的在build过程中别用到了。我之所以改用build这个字眼,没有使用编译,这个词,是因为build过程,不只会包括编译,也时候是脚本处理,也时候是执行一些工具处理一些文件。这整个过程叫build

最典型的例子,一个Linux内核,支持各种体系结构,你如果知道哪些文件你是真正用到的?

你可能会想查看.dep文件。对了大部分,对于纯源代码部分是你找出来了,可以一些编译的脚本,你知道那些真正用到了么?

我们典型的build system是调用make,它分析makefile,之后触发爆炸式的一系列的处理。别管它多复杂,也无非是进程fork & exec新的新的进程。所以只要我们能跟踪make调用起的所有子进程。找到所有的文件就是有希望的。

strace -f -e trace=open,stat,process -o filetrace.log make

工具strace,正好满足这个要求。参数-f是个关键点,用于跟踪所有的子进程。


要提醒一点,strace对系统的消耗是很大的,所以你的make不可以再用多进程编译。具体原因不明,但是我的测试结果是不可以。

那么接下来所有的信息都在filetrace.log中,这个文本文件需要被处理,整理出真正被打开的文件。我这里是用Perl处理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值