Tengo un archivo de objeto C++ que contiene ejemplos de algunas funciones de plantilla C++. El archivo objeto en cuestión ejemplifica la misma función para algunas combinaciones diferentes de parámetros de plantilla. Estoy intentando depurar un problema y me gustaría ver el desmontaje de una instanciación específica de la función de plantilla (es decir, conozco los parámetros de plantilla para la función que deseo examinar). Por lo general, hago esto usando objdump
para desensamblar el archivo objeto, pero (al menos de manera predeterminada) no es capaz de eliminar los nombres de las funciones C++. ¿Hay alguna manera de hacer esto? Los archivos objeto se crearon usando gcc 4.6.1.¿Puede objdump deshacer nombres de funciones de plantilla C++?
Respuesta
Pipe it through c++filt
? Podría necesitar darle -n
dependiendo de si los símbolos vienen con o sin el guión bajo inicial.
objdump -C
lo hace como se menciona en Jason R en un comentario.
man objdump
dice:
Decode (demangle) nombres de símbolos de bajo nivel en los nombres de nivel de usuario. Además de eliminar cualquier guion bajo inicial del sistema, esto hace que los nombres de las funciones de C++ sean legibles. Los diferentes compiladores tienen diferentes estilos de manipulación. El argumento de estilo de demanda opcional se puede utilizar para elegir un estilo de demanda adecuado para su compilador.
Salida de ejemplo en una operator new[]
encendido y objdump -CSr
invocación:
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
Sin -C
que mostraría el nombre revuelto _Znam
.
nm
también tiene esa opción.
- 1. ¿Alguien puede explicar nombres de funciones en Objective-C?
- 2. C++ - Espacio de nombres vs. funciones estáticas
- 3. Puede usar std :: async con funciones de plantilla
- 4. ¿Cómo puede objdump emitir sintaxis intel
- 5. _Underscores en nombres de funciones
- 6. plantilla especializada en un espacio de nombres
- 7. PHP: nombres de funciones ambiguas
- 8. prioridad al elegir las funciones de plantilla sobrecargados en C++
- 9. objdump y resolver el enlace de las llamadas a funciones locales?
- 10. Nombres de funciones en C++: ¿Capitalizar o no?
- 11. Definición del pre-procesador C para nombres de funciones generadas
- 12. Nombres de funciones de protección en R
- 13. ¿Cómo se puede emular el espacio de nombres en C?
- 14. Argumentos de plantilla para las funciones de plantilla
- 15. Diferencia entre nm y objdump
- 16. ¿Puedo deshacer el efecto de "usar el espacio de nombres" en C++?
- 17. ¿Cómo creo "deshacer" en C++?
- 18. C#: No se puede deshacer inserta el texto
- 19. Clase de plantilla, especialización de funciones
- 20. Clojure: La generación de funciones de plantilla
- 21. ¿Despacho dinámico de funciones de plantilla?
- 22. Métodos de plantilla y clases de plantilla C++
- 23. Plantilla de plantilla C++ Función
- 24. Nombres de funciones como cadenas en Lisp?
- 25. Scala: ¿puede deshacer la aplicación de varargs de devolución?
- 26. Categoría/funciones de plantilla de sangría de Emacs
- 27. C++ ADL en espacios de nombres anidados con función de plantilla
- 28. C++: ocultar algunas funciones
- 29. funciones de plantilla estáticas en una clase
- 30. uso de funciones en una plantilla subrayado
Parece que eso funcionaría. También encontré la opción '-C' para' objdump', que al parecer funciona para mi aplicación al menos. –
@JasonR aún mejor. Históricamente ha habido opciones y nombres variantes como 'nm ++', pero fueron al azar y tuve el hábito de simplemente canalizar todo. – smparkes
@JasonR, gracias por publicar esto ... '-C' no estaba documentado en mi versión de' objdump' (no se muestra con '--help') pero aún así funcionó. –