Есть ли в сети имя деманглера для C++?
Я получаю довольно длинную и запутанную ошибку ссылки, и мне бы очень хотелось, если бы я мог просто вставить ее в какое-нибудь текстовое поле на каком-либо веб-сайте и получить для меня имена без изменений.
Кто-нибудь знает о такой услуге?
5 ответов
Я создал такой онлайн сервис: http://demangler.com/
Это GCC C++ символ Деманглер. Вы просто копируете трассировку стека или вывод nm в текстовое поле, и он возвращает вывод с разбитыми именами.
@Update: теперь он также разбирает символы MSVC и Java.
Это может быть немного поздно, но я создал один, основываясь на этом вопросе. Он работает с входными данными, которые я пробовал, поддерживает g ++ и msvC++ через __cxa_demangle и __unDName, скомпилированные в Javascript через Emscripten. Надеюсь, что это кому-то поможет
Редактировать: Исправлена проблема побега
Большинство (если не все) компиляторы C++ поставляются с c++filt
инструмент, который делает именно то, что вы, по-видимому, ищете.
Если вы хотите это по щелчку мыши... хорошо написать графический интерфейс для этого;)
Существует два онлайн-решения для копирования и вставки:
- http://demangler.com/, который поддерживает символы GCC, Visual Studio или Java
- C++ FilterJS, который поддерживает GCC и Visual Studio, но имеет проблемы с параметрами шаблона
Если вам нужна только поддержка GCC и Clang, у вас также есть возможность использовать Coliru, вероятно, самый универсальный онлайн-компилятор C++.
Это не так просто, как вырезать, вставить и щелкнуть - но не слишком сложно - и похоже, что нет никаких проблем с параметрами шаблона, как было отмечено выше. Вам просто нужно изменить командную строку, чтобы запустить что-то вроде этого:
cat main.cpp | c++filt -t
Посмотрите это в прямом эфире с этим примером, который разбирает:
_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)
^^^^^^^^^^^
К вашему сведению, есть также рубиновый драгоценный камень, чтобы расколоть Borland/MS/ независимо от искаженных имен: unmangler