Existe-t-il un démangler de nom en ligne pour C ++? [fermé]
109
J'obtiens une erreur de lien assez longue et déroutante, et j'adorerais que je puisse simplement la coller dans une zone de texte sur un site Web et que les noms ne soient pas mutilés pour moi.
Ceci est un démangler de symbole gcc c ++. Vous copiez simplement une trace de pile, ou la sortie de nm dans une zone de texte, et elle renverra la sortie avec les noms démêlés.
@Update: Il démêle désormais les symboles MSVC et Java également.
Celui-ci a fonctionné pour moi, mais pas celui de la réponse la plus populaire: _ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu
Votre démangeur ne peut pas démêler les qualificatifs de référence pour Itanium. Je regarde _ZNR4test1fEv généré par Clang.
Puppy
Merci, beau site! Pourriez-vous s'il vous plaît ajouter white-space: normalou similaire à la balise responseSection <pre> (et peut-être ajouter des numéros de ligne)? La sortie longue d'une ligne n'est pas lisible actuellement.
jplatte
1
Vous devez être prudent. La plupart des implémentations réelles de démangleurs sont terriblement boguées et peu sûres. Ils ne fonctionnent essentiellement que sur les noms mutilés produits par la même plate-forme, mais peuvent se heurter à une complexité élevée ou à des erreurs de mémoire à plat sur les entrées générales.
Kerrek SB
8
Je l'ai utilisé régulièrement. C'était une page très belle et utile
chrise
104
C'est peut-être un peu tard, mais j'en ai créé un, basé sur cette question. Il fonctionne avec les entrées que j'ai essayées, prend en charge g ++ et msvc ++ via __cxa_demangle et __unDName, compilé en Javascript via Emscripten. J'espère que cela aide quelqu'un: c ++ filtjs
Impressionnant! Je vous remercie! Peut-être mentionnez-vous "Démangeur de nom C ++ en ligne" quelque part sur la page, afin que les gens puissent vous trouver via Google?
Roman Starkov
1
D'accord, devrait être corrigé maintenant.
nattofriends
3
@Zibri: une "petite source C" n'est pas en ligne. Pour cela, utilisez les utilitaires c ++ filt et undname existants.
nattofriends
1
@nattofriends: votre outil ne semble pas échapper aux crochets, voir ??_R3?$KxSet@V?$KxSpe@DI@@I@@8.
Mooing Duck
2
Ce serait très utile si vous pouviez résoudre votre problème avec les modèles que d'autres ont mentionnés. Cela a provoqué au moins une question fallacieuse sur SO.
Shafik Yaghmour
24
La plupart (sinon tous) des compilateurs C ++ sont livrés avec un c++filtoutil qui fait exactement ce que vous recherchez apparemment.
Si vous le voulez en un clic de souris ... eh bien écrivez une interface graphique pour cela;)
Je le veux avec un minimum d'effort plutôt qu'avec un clic de souris :) Eh bien, je n'en ai pas besoin très souvent de toute façon.
Roman Starkov
3
mon cas d'utilisation habituel pour c ++ filt est objdump -dr ./AClass.o | c++filt | less(désassembleur) ou nm ./AClass.o | c++filt | less(liste des symboles à l'intérieur du fichier objet)
Dummy00001
2
La plupart des compilateurs ne sont pas GCC. Les compilateurs qui ne sont pas GCC ne livrent pas de fichier c ++. Par induction, la plupart des compilateurs ne livrent pas de fichier c ++.
IInspectable
9
Il existe deux solutions de copier-coller en ligne:
demangler.com , qui prend en charge les symboles GCC, Visual Studio ou Java
Si vous n'avez besoin que de la prise en charge de GCC et Clang, vous avez également la possibilité d'utiliser Coliru , qui est probablement le compilateur C ++ en ligne le plus polyvalent .
Ce n'est pas aussi simple que couper, coller et cliquer - mais pas trop difficile - et il semble qu'il n'y ait pas de problèmes avec les paramètres du modèle comme indiqué ci-dessus. Il vous suffit de modifier la ligne de commande pour exécuter quelque chose comme ceci:
Réponses:
J'ai créé un tel service en ligne: https://demangler.com
Ceci est un démangler de symbole gcc c ++. Vous copiez simplement une trace de pile, ou la sortie de nm dans une zone de texte, et elle renverra la sortie avec les noms démêlés.
@Update: Il démêle désormais les symboles MSVC et Java également.
la source
white-space: normal
ou similaire à la balise responseSection <pre> (et peut-être ajouter des numéros de ligne)? La sortie longue d'une ligne n'est pas lisible actuellement.C'est peut-être un peu tard, mais j'en ai créé un, basé sur cette question. Il fonctionne avec les entrées que j'ai essayées, prend en charge g ++ et msvc ++ via __cxa_demangle et __unDName, compilé en Javascript via Emscripten. J'espère que cela aide quelqu'un: c ++ filtjs
Edit: Correction d'un problème d'échappement
la source
??_R3?$KxSet@V?$KxSpe@DI@@I@@8
.La plupart (sinon tous) des compilateurs C ++ sont livrés avec un
c++filt
outil qui fait exactement ce que vous recherchez apparemment.Si vous le voulez en un clic de souris ... eh bien écrivez une interface graphique pour cela;)
la source
objdump -dr ./AClass.o | c++filt | less
(désassembleur) ounm ./AClass.o | c++filt | less
(liste des symboles à l'intérieur du fichier objet)Il existe deux solutions de copier-coller en ligne:
Si vous n'avez besoin que de la prise en charge de GCC et Clang, vous avez également la possibilité d'utiliser Coliru , qui est probablement le compilateur C ++ en ligne le plus polyvalent .
Ce n'est pas aussi simple que couper, coller et cliquer - mais pas trop difficile - et il semble qu'il n'y ait pas de problèmes avec les paramètres du modèle comme indiqué ci-dessus. Il vous suffit de modifier la ligne de commande pour exécuter quelque chose comme ceci:
Voyez-le en direct avec cet exemple qui démêle:
à:
la source
Pour info, il y a aussi un joyau Ruby pour démêler Borland / MS / quels que soient les noms mutilés: démêler
la source