Existe um demangler de nomes online para C ++? [fechadas]
109
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.
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.
Este funcionou para mim, mas não o da resposta mais popular: _ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu
Seu demangler não pode demangler qualificadores ref para Itanium. Estou olhando para _ZNR4test1fEv gerado pelo Clang.
Cachorro de
Obrigado, bom site! Você poderia adicionar white-space: normalou 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.
jplatte de
1
Você deve ter cuidado. A maioria das implementações do mundo real de demanglers são terrivelmente bugadas e inseguras. Eles basicamente funcionam apenas em nomes mutilados que a mesma plataforma produziu, mas podem apresentar alta complexidade ou erros de memória planos em entradas gerais.
Kerrek SB
8
Eu tenho usado regularmente. Parece estar fora do ar, entretanto. Era uma página muito boa e útil
chrise
104
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
Impressionante! Obrigado! Talvez mencione "Eliminador de nomes C ++ online" em algum lugar da página, para que as pessoas possam encontrá-lo pelo Google.
Roman Starkov
1
Ok, deve ser consertado agora.
nattofriends
3
@Zibri: uma "pequena fonte C" não está online. Para isso, use os utilitários c ++ filt e undname existentes.
nattofriends
1
@nattofriends: Sua ferramenta não parece escapar dos colchetes, veja ??_R3?$KxSet@V?$KxSpe@DI@@I@@8.
Mooing Duck
2
Seria muito útil se você pudesse corrigir seu problema com os modelos que outras pessoas mencionaram. Isso causou pelo menos uma pergunta espúria no SO.
Shafik Yaghmour
24
A maioria (senão todos) dos compiladores C ++ vem com c++filtferramentas que fazem exatamente o que você aparentemente está procurando.
Se você quiser com um clique do mouse ... vamos escrever uma GUI para ele;)
Eu quero isso com o mínimo de esforço ao invés de um clique do mouse :) Bem, eu não preciso disso com muita frequência de qualquer maneira.
Roman Starkov
3
meu caso de uso usual para c ++ filt é objdump -dr ./AClass.o | c++filt | less(desmontador) ou nm ./AClass.o | c++filt | less(lista de símbolos dentro do arquivo objeto)
Dummy00001
2
A maioria dos compiladores não é GCC. Compiladores que não são GCC não enviam c ++ filt. Por indução, a maioria dos compiladores não fornece c ++ filt.
Inspecionável de
9
Existem duas soluções online para copiar e colar:
demangler.com , que oferece suporte a símbolos GCC, Visual Studio ou Java
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:
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.
fonte
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
fonte
??_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;)
fonte
objdump -dr ./AClass.o | c++filt | less
(desmontador) ounm ./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:
Veja ao vivo com este exemplo que demangles:
para:
fonte
Para sua informação, há também uma joia do Ruby para demangler Borland / MS / quaisquer nomes mutilados: unmangler
fonte