我不小心删除了一个尚未添加到版本控制中的.h文件,但是我仍然拥有.h.gch。有什么办法可以反编译.gch吗?

最佳答案

您可以尝试运行strings实用程序。 GCH定义了很多内部gcc宏,因此我建议您对字符串进行两次转储:

首先是您的gch:$ strings file.h.gch
第二个是用于预编译的空头文件(或者,如果您还记得的话,头文件中包含的内容-也包含在此文件中)

然后,您可以保存两个转储并进行差异运行:

对于我的例子:

#define d1234

#undef dsgf

int asdfgh(char a);
int ghjkl(int g, int h);

在diff中,所有名称都位于最顶部:
1074a1075
> asdfgh
1189a1191
> d1234
1200a1203
> dsgf
1287a1291
> ghjkl

如何获得功能的结构和参数-我不知道。
但是我建议您是否可以使用此pch(例如用#include "file.h"替换#pragma GCC pch_preprocess "file.h.gch")-然后可以使用-fdump-tree-all-all-frtl-dump-all-all进行树和rtl转储。一些转储将包含更多信息,这些信息来自丢失的 header 。

09-10 19:28