Может objdump не использовать символы шаблонов С++?

У меня есть объектный файл С++, содержащий экземпляры некоторых функций шаблона С++. Этот объектный файл создает одну и ту же функцию для нескольких различных комбинаций параметров шаблона. Я пытаюсь отладить проблему и хотел бы посмотреть на разборку конкретного экземпляра функции шаблона (то есть, я знаю параметры шаблона для функции, которую я хочу изучить). Обычно я делаю это с помощью objdump, чтобы разобрать объектный файл, но он (по крайней мере по умолчанию) не может деактивировать имена функций С++. Есть какой-либо способ сделать это? Объектные файлы были созданы с использованием gcc 4.6.1.

Ответ 1

Протяните его через c++filt? Может потребоваться дать ему -n в зависимости от того, будут ли символы введены w/или без верхнего подчеркивания.

Ответ 2

objdump -C делает это как указано в Jason R в комментарии.

man objdump говорит:

Декодировать (demangle) низкоуровневые имена символов в именах пользовательского уровня. Помимо удаления начального подчеркивания, добавленного системой, это делает имена функций С++ доступными для чтения. У разных компиляторов разные стили оформления. Необязательный аргумент стиля demangling можно использовать для выбора подходящего стиля demangling для вашего компилятора.

Пример вывода при вызове operator new[] on и objdump -CSr:

  char *sn = new char[4];
10:   bf 04 00 00 00          mov    $0x4,%edi
15:   e8 00 00 00 00          callq  1a <main+0x1a>
                      16: R_X86_64_PC32       operator new[](unsigned long)-0x4

Без -C он отобразит искаженное имя _Znam.

nm также имеет эту опцию.