Я получаю довольно длинную и запутанную ошибку ссылки, и мне бы очень понравилось, если бы я мог просто вставить ее в какое-нибудь текстовое поле на каком-нибудь веб-сайте и исправить имена для меня.
Кто-нибудь знает о таком сервисе?
Я получаю довольно длинную и запутанную ошибку ссылки, и мне бы очень понравилось, если бы я мог просто вставить ее в какое-нибудь текстовое поле на каком-нибудь веб-сайте и исправить имена для меня.
Кто-нибудь знает о таком сервисе?
Ответы:
Я создал такой онлайн-сервис: https://demangler.com
Это деманглер символов gcc c ++. Вы просто копируете трассировку стека или вывод nm в текстовое поле, и он возвращает вывод с размеченными именами.
@Update: теперь он также разбирает символы MSVC и Java.
white-space: normal
или аналогично тегу responseSection <pre> (и, возможно, добавить номера строк)? Длинный однострочный вывод в настоящее время не читается.
Это может быть немного поздно, но я создал его на основе этого вопроса. Он работает с теми входами, которые я пробовал, поддерживает g ++ и msvc ++ через __cxa_demangle и __unDName, скомпилирован в Javascript через Emscripten. Надеюсь, это кому-то поможет: c ++ filterjs
Изменить: исправлена проблема с побегом
??_R3?$KxSet@V?$KxSpe@DI@@I@@8
.
Большинство (если не все) компиляторы C ++ поставляются с c++filt
инструментами, которые делают именно то, что вы, по-видимому, ищете.
Если вы хотите, чтобы он был щелчком мыши ... ну напишите для него графический интерфейс;)
objdump -dr ./AClass.o | c++filt | less
(дизассемблер) или nm ./AClass.o | c++filt | less
(список символов внутри объектного файла)
Есть два онлайн-решения для копирования и вставки:
Если вам нужна только поддержка 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)
^^^^^^^^^^^