Czy istnieje internetowy demangler nazw dla C ++? [Zamknięte]
109
Otrzymuję dość długi i mylący błąd linku i bardzo by mi się podobał, gdybym mógł po prostu wkleić go do jakiegoś pola tekstowego na jakiejś stronie internetowej i zmienić nazwy dla mnie.
Ten działał dla mnie, ale nie ten w bardziej popularnej odpowiedzi: _ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu
Twój demangler nie może rozszyfrować kwalifikatorów ref dla Itanium. Patrzę na _ZNR4test1fEv wygenerowany przez Clang.
Puppy
Dzięki, fajna strona! Czy mógłbyś dodać white-space: normallub coś podobnego do znacznika responseSection <pre> (i może dodać numery wierszy)? Długie jednowierszowe dane wyjściowe nie są obecnie czytelne.
jplatte
1
Powinieneś być ostrożny. Większość rzeczywistych implementacji demanglerów jest strasznie wadliwa i niepewna. Zasadniczo działają tylko na zniekształconych nazwach, które stworzyła ta sama platforma, ale mogą napotkać dużą złożoność lub wyrównać błędy pamięci na ogólnych danych wejściowych.
Kerrek SB
8
Używałem go regularnie. Wygląda na to, że jest na dole. To była bardzo fajna, przydatna strona
chrise
104
To może być trochę za późno, ale stworzyłem taki na podstawie tego pytania. Działa z danymi wejściowymi, które wypróbowałem, obsługuje g ++ i msvc ++ przez __cxa_demangle i __unDName, skompilowane do Javascript przez Emscripten. Mam nadzieję, że to komuś pomoże: c ++ filtjs
Niesamowite! Dziękuję Ci! Może wspomnij gdzieś na stronie o „Online demangler C ++ name”, aby ludzie mogli Cię znaleźć przez Google?
Roman Starkov
1
OK, powinno zostać teraz naprawione.
nattofriends
3
@Zibri: „małe źródło C” nie jest online. W tym celu użyj istniejących narzędzi c ++ filt i undname.
nattofriends
1
@nattofriends: Twoje narzędzie nie wychodzi poza nawiasy, zobacz ??_R3?$KxSet@V?$KxSpe@DI@@I@@8.
Mooing Duck
2
Byłoby bardzo pomocne, gdybyś mógł rozwiązać problem z szablonami, o których wspominali inni. Spowodowało to co najmniej jedno fałszywe pytanie dotyczące SO.
Shafik Yaghmour
24
Większość (jeśli nie wszystkie) kompilatorów C ++ zawiera c++filtnarzędzie, które robi dokładnie to, czego najwyraźniej szukasz.
Jeśli chcesz to jednym kliknięciem myszy ... cóż, napisz do tego GUI;)
Chcę tego przy minimalnym wysiłku, a nie za pomocą kliknięcia myszą :) No cóż, i tak nie potrzebuję tego zbyt często.
Roman Starkov
3
moim zwykłym przypadkiem użycia dla c ++ filt jest objdump -dr ./AClass.o | c++filt | less(deasembler) lub nm ./AClass.o | c++filt | less(lista symboli wewnątrz pliku obiektowego)
Dummy00001
2
Większość kompilatorów nie jest GCC. Kompilatory, które nie są GCC, nie dostarczają filtru c ++. Przez indukcję większość kompilatorów nie dostarcza filtru c ++.
Niespodziewane
9
Istnieją dwa rozwiązania online do kopiowania i wklejania:
demangler.com , który obsługuje symbole GCC, Visual Studio lub Java
Jeśli potrzebujesz tylko obsługi GCC i Clang, masz również możliwość używania Coliru , który jest prawdopodobnie najbardziej wszechstronnym kompilatorem C ++ online .
Nie jest to tak proste, jak wycinanie, wklejanie i klikanie - ale nie jest to zbyt trudne - i wygląda na to, że nie ma problemów z parametrami szablonu, jak wspomniano powyżej. Wystarczy zmodyfikować wiersz poleceń, aby uruchomić coś takiego:
Odpowiedzi:
Stworzyłem taką usługę online: https://demangler.com
To jest demangler symboli gcc c ++. Po prostu skopiuj ślad stosu lub wyjście nm do pola tekstowego, a wynik zwróci wynik z zdemanglowanymi nazwami.
@Update: teraz demontuje również symbole MSVC i Java.
źródło
white-space: normal
lub coś podobnego do znacznika responseSection <pre> (i może dodać numery wierszy)? Długie jednowierszowe dane wyjściowe nie są obecnie czytelne.To może być trochę za późno, ale stworzyłem taki na podstawie tego pytania. Działa z danymi wejściowymi, które wypróbowałem, obsługuje g ++ i msvc ++ przez __cxa_demangle i __unDName, skompilowane do Javascript przez Emscripten. Mam nadzieję, że to komuś pomoże: c ++ filtjs
Edycja: Naprawiono problem ucieczki
źródło
??_R3?$KxSet@V?$KxSpe@DI@@I@@8
.Większość (jeśli nie wszystkie) kompilatorów C ++ zawiera
c++filt
narzędzie, które robi dokładnie to, czego najwyraźniej szukasz.Jeśli chcesz to jednym kliknięciem myszy ... cóż, napisz do tego GUI;)
źródło
objdump -dr ./AClass.o | c++filt | less
(deasembler) lubnm ./AClass.o | c++filt | less
(lista symboli wewnątrz pliku obiektowego)Istnieją dwa rozwiązania online do kopiowania i wklejania:
Jeśli potrzebujesz tylko obsługi GCC i Clang, masz również możliwość używania Coliru , który jest prawdopodobnie najbardziej wszechstronnym kompilatorem C ++ online .
Nie jest to tak proste, jak wycinanie, wklejanie i klikanie - ale nie jest to zbyt trudne - i wygląda na to, że nie ma problemów z parametrami szablonu, jak wspomniano powyżej. Wystarczy zmodyfikować wiersz poleceń, aby uruchomić coś takiego:
Zobacz to na żywo z tym przykładem, który demantuje:
do:
źródło
FYI, jest też klejnot Ruby do rozszyfrowania Borland / MS / jakichkolwiek zniekształconych nazw: Unmangler
źródło