Estou recebendo um erro de link bastante longo e confuso e adoraria se pudesse apenas colá-lo em alguma caixa de texto em algum site e ter os nomes desmontados para mim.
Alguém conhece tal serviço?
Estou recebendo um erro de link bastante longo e confuso e adoraria se pudesse apenas colá-lo em alguma caixa de texto em algum site e ter os nomes desmontados para mim.
Alguém conhece tal serviço?
Respostas:
Eu criei um serviço online: https://demangler.com
Este é um demangler de símbolo gcc c ++. Basta copiar um rastreamento de pilha, ou a saída de nm em uma caixa de texto, e ele retornará a saída com os nomes demangled.
@Update: Ele agora demangles MSVC e símbolos Java também.
white-space: normal
ou algo semelhante à tag responseSection <pre> (e talvez adicionar números de linha)? A saída longa de uma linha não pode ser lida atualmente.
Pode ser um pouco tarde, mas criei um, com base nesta pergunta. Funciona com as entradas que experimentei, suporta g ++ e msvc ++ via __cxa_demangle e __unDName, compilado para Javascript via Emscripten. Espero que isso ajude alguém: c ++ filtjs
Editar: Corrigido o problema de escape
??_R3?$KxSet@V?$KxSpe@DI@@I@@8
.
A maioria (senão todos) dos compiladores C ++ vem com c++filt
ferramentas que fazem exatamente o que você aparentemente está procurando.
Se você quiser com um clique do mouse ... vamos escrever uma GUI para ele;)
objdump -dr ./AClass.o | c++filt | less
(desmontador) ou nm ./AClass.o | c++filt | less
(lista de símbolos dentro do arquivo objeto)
Existem duas soluções online para copiar e colar:
Se você só precisa de suporte para GCC e Clang, também tem a opção de usar Coliru , que é provavelmente o compilador C ++ online mais versátil .
Isso não é tão simples quanto cortar, colar e clicar - mas não muito mais difícil - e parece que não há problemas com os parâmetros do modelo, conforme observado acima. Você só precisa modificar a linha de comando para executar algo assim:
cat main.cpp | c++filt -t
Veja ao vivo com este exemplo que demangles:
_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_
para:
void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
^^^^^^^^^^^