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.
Quelqu'un connaît-il un tel service?
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.
Quelqu'un connaît-il un tel service?
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.
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
??_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;)
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)
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:
cat main.cpp | c++filt -t
Voyez-le en direct avec cet exemple qui démêle:
_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_
à:
void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
^^^^^^^^^^^