Я отримую досить довгу і заплутану помилку посилання, і мені сподобається, якби я міг просто вставити її в якийсь текстовий ящик на якомусь веб-сайті і мати імена, не змінені для мене.
Хтось знає про таку послугу?
Я отримую досить довгу і заплутану помилку посилання, і мені сподобається, якби я міг просто вставити її в якийсь текстовий ящик на якомусь веб-сайті і мати імена, не змінені для мене.
Хтось знає про таку послугу?
Відповіді:
Я створив таку інтернет-серівіку: https://demangler.com
Це деманглер символу gcc c ++. Ви просто скопіюєте слід стека або вихід nm у текстове поле, і він поверне висновок з іменами, розібраними.
@Update: Тепер він також демонтує символи MSVC та Java.
white-space: normal
тег answerSection <pre> (а можливо, додати номери рядків) чи подібне до нього? Наразі довгий однорядний вихід не читабельний.
Це може бути трохи пізно, але я створив це, грунтуючись на цьому питанні. Він працює з вхідними даними, які я приміряв, підтримує g ++ та msvc ++ через __cxa_demangle та __unDName, складені в Javascript через Emscripten. Сподіваюся, це допоможе комусь: c ++ filtjs
Редагувати: Виправлена проблема усунення
??_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)
^^^^^^^^^^^