10

バージョン管理に追加していない .h ファイルを誤って削除してしまいましたが、まだ .h.gch があります。.gch をアンコンパイルする方法はありますか?

4

3 に答える 3

4

stringsユーティリティの実行を試みることができます。GCH には多くの内部 gcc マクロが定義されているため、文字列を使用して 2 つのダンプを実行することをお勧めします。

最初はあなたのgch用です:$ strings file.h.gch

2 つ目は、プリコンパイル済みの空のヘッダー ファイルです (または、覚えている場合は、ヘッダーに含まれていたものをこのファイルにも含めます)。

次に、両方のダンプを保存して、diff を実行できます。

私の例では:

#define d1234

#undef dsgf

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

差分にはすべての名前が一番上にあります:

1074a1075
> asdfgh
1189a1191
> d1234
1200a1203
> dsgf
1287a1291
> ghjkl

関数の構造体とパラメータを取得する方法 - わかりません。ただし、この pch を使用できる場合 (たとえば、 に置き換えます) をお勧めし#include "file.h"ます。その後、 and#pragma GCC pch_preprocess "file.h.gch"を使用してツリーと rtl ダンプを実行できます。一部のダンプには、失われたヘッダーから派生した詳細情報が含まれます。-fdump-tree-all-all-frtl-dump-all-all

于 2011-06-21T00:58:08.400 に答える
3

おそらく不可能です。通常、コンパイルは一方向のプロセスです。一度実行すると、最初のソースコードを再構築する方法はなく、変数名、コメント、さらには特定のサブルーチンなどがインライン化され、アイロンがけされます。同じことがプリコンパイル済みヘッダーにも当てはまるため、.gchファイルからドキュメントと名前を再構築する良い方法はおそらくありません。ヘッダー内の名前のいくつかのバージョンを再構築することもできますが、これもすでに持っているものと同じです。あなたがバックアップを持っていない限り、あなたはほとんど運が悪いです。

于 2011-06-20T21:48:22.400 に答える
2

私の知る限り、gchファイルは、ヘッダーを処理した後のコンパイラのメモリのある種のダンプです (少なくとも、その IR に含まれるデータ構造が含まれている限り)。元のヘッダーに含まれていた情報のかなりの部分が何らかの形で残っている可能性がありますが、それを抽出するツールはないと思います。

于 2011-06-20T23:13:45.043 に答える