Есть ли в сети имя деманглера для C++?

Я получаю довольно длинную и запутанную ошибку ссылки, и мне бы очень хотелось, если бы я мог просто вставить ее в какое-нибудь текстовое поле на каком-либо веб-сайте и получить для меня имена без изменений.

Кто-нибудь знает о такой услуге?

5 ответов

Решение

Я создал такой онлайн сервис: http://demangler.com/

Это GCC C++ символ Деманглер. Вы просто копируете трассировку стека или вывод nm в текстовое поле, и он возвращает вывод с разбитыми именами.

@Update: теперь он также разбирает символы MSVC и Java.

Это может быть немного поздно, но я создал один, основываясь на этом вопросе. Он работает с входными данными, которые я пробовал, поддерживает g ++ и msvC++ через __cxa_demangle и __unDName, скомпилированные в Javascript через Emscripten. Надеюсь, что это кому-то поможет

Редактировать: Исправлена ​​проблема побега

Большинство (если не все) компиляторы C++ поставляются с c++filt инструмент, который делает именно то, что вы, по-видимому, ищете.

Если вы хотите это по щелчку мыши... хорошо написать графический интерфейс для этого;)

Существует два онлайн-решения для копирования и вставки:

Если вам нужна только поддержка 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

Другие вопросы по тегам