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