Recibo un error de enlace bastante largo y confuso, y me encantaría si pudiera pegarlo en algún cuadro de texto en algún sitio web y desarmar los nombres por mí.
¿Alguien sabe de tal servicio?
Recibo un error de enlace bastante largo y confuso, y me encantaría si pudiera pegarlo en algún cuadro de texto en algún sitio web y desarmar los nombres por mí.
¿Alguien sabe de tal servicio?
Respuestas:
He creado un servicio en línea de este tipo: https://demangler.com
Este es un demandador de símbolos gcc c ++. Simplemente copie un seguimiento de pila, o la salida de nm en un cuadro de texto, y devolverá la salida con los nombres exigidos.
@Update: ahora también exige símbolos MSVC y Java.
white-space: normal
o similar a la etiqueta responseSection <pre> (y tal vez agregar números de línea)? La salida larga de una línea no se puede leer actualmente.
Esto puede ser un poco tarde, pero creé uno, basado en esta pregunta. Funciona con las entradas que probé, admite g ++ y msvc ++ a través de __cxa_demangle y __unDName, compilado en Javascript a través de Emscripten. Espero que esto ayude a alguien: c ++ filtjs
Editar: problema de escape solucionado
??_R3?$KxSet@V?$KxSpe@DI@@I@@8
.
La mayoría (si no todos) de los compiladores de C ++ vienen con c++filt
herramientas que hacen precisamente lo que aparentemente estás buscando.
Si lo desea con el clic del mouse ... escriba una GUI para ello;)
objdump -dr ./AClass.o | c++filt | less
(desensamblador) o nm ./AClass.o | c++filt | less
(lista de símbolos dentro del archivo de objeto)
Hay dos soluciones en línea para copiar y pegar:
Si solo necesita soporte para GCC y Clang, también tiene la opción de usar Coliru , que es probablemente el compilador de C ++ en línea más versátil .
Esto no es tan simple como cortar, pegar y hacer clic, pero no mucho más difícil, y parece que no hay problemas con los parámetros de la plantilla como se señaló anteriormente. Solo necesita modificar la línea de comando para ejecutar algo como esto:
cat main.cpp | c++filt -t
Véalo en vivo con este ejemplo que exige:
_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)
^^^^^^^^^^^