Przypadkowo usunięto plik .h, którego nie dodałem do kontroli wersji, ale nadal mam .h.gch. Czy istnieje sposób na kompilację pliku .gch?Nieskompilowanie pliku gch
Odpowiedz
Prawdopodobnie nie jest to możliwe. Kompilacja jest zwykle procesem jednokierunkowym; kiedy to zrobisz, nie ma możliwości zrekonstruowania początkowego kodu źródłowego, a rzeczy takie jak nazwy zmiennych, komentarze, a nawet niektóre podprogramy będą zaznaczone i wyprasowane. To samo dotyczy prekompilowanych nagłówków, więc nie istnieje żaden dobry sposób na zrekonstruowanie dokumentacji i nazw z pliku .gch. Być może zrekonstruowałbyś niektóre wersje nazw w nagłówku, ale potem znowu nie byłoby inaczej niż to, co już masz. Jeśli nie masz kopii zapasowej, masz dużo szczęścia.
Pliki AFAIK z gch
są pewnego rodzaju zrzutem pamięci kompilatora po przetworzeniu nagłówka (przynajmniej jeśli chodzi o struktury danych zaangażowane w jego IR); może duża część informacji zawartych w oryginalnym nagłówku nadal istnieje w jakiejś formie, ale nie sądzę, że istnieje narzędzie do jej wyodrębnienia.
Możesz spróbować uruchomić narzędzie strings
. GCH mieć dużo wewnętrznej gcc makra zdefiniowane, więc proponuję zrobić dwa zrzuty z ciągów:
Pierwszy jest dla GCH: $ strings file.h.gch
a drugi jest skompilowany plik pusty nagłówka (lub, jeśli można zapamiętać , co zostało zawarte w nagłówku - to w tym pliku zbyt)
Następnie można zapisać zarówno wysypisk i zrobić biegać diff:
na moim przykładzie:
#define d1234
#undef dsgf
int asdfgh(char a);
int ghjkl(int g, int h);
istnieją w diff wszystkie nazwy na samej górze:
1074a1075
> asdfgh
1189a1191
> d1234
1200a1203
> dsgf
1287a1291
> ghjkl
jak dostać struktury i parametrów functions- nie wiem. Ale proponuję, jeśli możesz użyć tego pch (na przykład zastąpić #include "file.h"
przez #pragma GCC pch_preprocess "file.h.gch"
) - wtedy możesz zrobić drzewo i zrzut rtl z -fdump-tree-all-all
i -frtl-dump-all-all
. Niektóre zrzuty zawierają więcej informacji, pochodzących z utraconego nagłówka.
- 1. Nie można przekazać klucza GCH do domeny AppDomains: rozwiązanie bez delegatów?
- 2. Konwersja pliku FileObject do pliku
- 3. Pliku pliku tekstowego z Python
- 4. Czytanie pliku wewnątrz pliku Makefile
- 5. nazwa pliku lub nazwa pliku?
- 6. Ścieżka pliku analizy pliku JSON
- 7. Obracanie pliku pliku Python Obracanie pliku nie obraca się
- 8. Jak odczytać zawartość pliku z pliku?
- 9. Używanie wbudowanego pliku XSLT dla pliku XML
- 10. Pobieranie nazwy pliku Makefile z pliku Makefile
- 11. Nie można zaimportować pliku do pliku .emacs
- 12. Tworzenie pliku CMakeLists z istniejącego pliku Makefile
- 13. Znajdowanie nazwy pliku uruchomionego pliku wsadowego
- 14. Jak osadzić treść pliku w pliku HTML?
- 15. Czytanie pliku Strings.xml z pliku apk
- 16. Używanie pliku javascript w innym pliku JS
- 17. Uzyskaj nazwę pliku z pliku wejściowego Angular2
- 18. Generowanie pliku XML przy użyciu pliku XSD
- 19. getline() z deskryptorem pliku zamiast wskaźnika pliku
- 20. Pobieranie nazwy pliku z pliku pobierania http
- 21. Zapisywanie pliku wideo do pliku OpenCV
- 22. Konwersja pliku PDF do pliku tekstowego
- 23. Usuwanie pliku tylko z obiektu pliku python
- 24. Zapisywanie pliku CGImageRef w pliku PNG?
- 25. Drukowanie pliku wyjściowego skryptu php do pliku
- 26. Python, napisz w pliku zip do pliku
- 27. NSMetadataQuery ignorowanie niestandardowego typu pliku pliku
- 28. Jak zapisać wyjście pliku AUGraph do pliku?
- 29. Tworzenie pliku .MAP z pliku .PDB
- 30. Ustaw wartość pliku cookie w pliku Node.js
Myślę, że jest to technicznie możliwe, ponieważ plik 'gch' wydaje się być raczej" binarnym plikiem nagłówkowym ", a nie czymś, co było naprawdę" skompilowane ". Prekompilowane nagłówki zawierają wszystkie informacje, które wcześniej znajdowały się w nagłówkach, na przykład makra/stałe '# define' -d w prekompilowanym nagłówku są tam, jak gdybyś zawarł nagłówek jako prawdziwy. Tyle na dobre wieści. Teraz, ze względu na złą wiadomość, nie wierzę, że istnieje narzędzie do odwrócenia tego procesu. Gdyby taki był, musiałby być również dostosowany do wersji _exact_ kompilatora, z powodu różnych reprezentacji binarnych. – Damon