C'è un nome demangler in linea per C ++? [chiuso]
Domanda
Ricevo un errore di collegamento abbastanza lunga e confusa, e mi piacerebbe se solo potessi incollarlo in qualche testo su qualche sito e hanno i nomi non-alterati per me.
Qualcuno sa di tale servizio un?
Soluzione
Ho creato un serivice tale linea: http://demangler.com
Questa è una gcc c ++ simbolo demangler. Basta copiare una traccia dello stack, o l'uscita di nm in una casella di testo, e restituirà l'uscita con i nomi demangled.
@Update: Ora demangles anche i simboli MSVC e Java.
Altri suggerimenti
Questo potrebbe essere un po 'tardi, ma ho creato uno, sulla base di questa domanda. Funziona con gli ingressi che ho provato su, supporti g ++ e msvc ++ tramite __cxa_demangle e __unDName, compilato per Javascript tramite Emscripten. Spero che questo aiuta qualcuno: C ++ filtjs
Modifica: Risolto problema fuga
La maggior parte (se non tutti) i compilatori C ++ sono dotati di strumento c++filt
che fa esattamente quello che apparentemente cercando.
Se si desidera che al clic del mouse ... beh scrivere una GUI per esso;)
Ci sono due copia-e-incolla di soluzioni on-line:
- demangler.com , che supporta GCC, Visual Studio, o simboli Java
- C ++ filtjs , che supporta GCC e Visual Studio, ma https://stackoverflow.com/questions/21284752/two-mangled-names-demangling-to-the-same-function-signature ha problemi con template parametri
Se avete solo bisogno di supporto per GCC e Clang, hai anche la possibilità di utilizzare Coliru , che è probabilmente il più versatile linea C ++ .
Questa non è così semplice come tagliare, incollare, e fare clic su - ma non troppo difficile - e sembra che non ci sono problemi con parametri di modello come è stato osservato in precedenza. Hai solo bisogno di modificare la riga di comando per eseguire qualcosa di simile:
cat main.cpp | c++filt -t
vederla dal vivo con questo esempio che demangles:
_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_
a:
void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
^^^^^^^^^^^
A proposito, c'è anche una gemma Ruby per decodifica i Borland / MS / qualunque cosa storpiato nomi: unmangler