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.
Czy ktoś wie o takiej usłudze?
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.
Czy ktoś wie o takiej usłudze?
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.
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
??_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;)
objdump -dr ./AClass.o | c++filt | less
(deasembler) lub nm ./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:
cat main.cpp | c++filt -t
Zobacz to na żywo z tym przykładem, który demantuje:
_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_
do:
void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
^^^^^^^^^^^