¿Alguien conoce el enlace del código fuente de C++ filt? Quiero llamar a C++ filt en mi código como biblioteca.¿dónde está el código fuente de C++ filt?
Respuesta
En Linux puede usar /usr/include/demangle.h
que viene con el paquete binutils-dev
. Tendrá que enlazar al libiberty
desde binutils
.
es parte de binutils:
Dadas las diferentes compiladores pueden destrozar de manera diferente, cada uno tiende a buque con un C++ filt personalizado. Pero, la mayoría de los sistemas ya tendrán disponible una función de biblioteca exigente en alguna parte. En mi cuadro de Linux, encontré el encabezado /usr/include/c++/version/cxxabi.h definiendo __cxa_demangle() (vea http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html). Aunque pensé que había usado alguna otra función en el pasado, pero no puedo encontrar los detalles (EDIT: probablemente la versión demangle de documentos de correo electrónico). En AIX hay un demangle.h.
EDIT: en la mayoría de los sistemas con programas pstack y C++ filt (es decir, Linux y Solaris), el siguiente debería funcionar ...
#include <cstdio>
#include <iostream>
#include <sstream>
struct X
{
void f()
{
std::ostringstream cmd;
cmd << "pstack " << getpid() << " | c++filt";
if (FILE* f = popen(cmd.str().c_str(), "r"))
{
char buffer[1024];
int n;
while ((n = fread(buffer, 1, sizeof buffer, f)) > 0)
std::cout.write(buffer, n);
}
else
std::cerr << "popen() failed\n";
}
};
int main()
{
X x;
x.f();
}
... ... de salida
#0 0x003539be in __read_nocancel() from /lib/tls/i686/libc.so.6
#1 0x002ff590 in _IO_file_read_internal() from /lib/tls/i686/libc.so.6
#2 0x002fe522 in _IO_new_file_underflow() from /lib/tls/i686/libc.so.6
#3 0x00300371 in __underflow() from /lib/tls/i686/libc.so.6
#4 0x0030079d in _IO_default_xsgetn_internal() from /lib/tls/i686/libc.so.6
#5 0x00300733 in _IO_sgetn_internal() from /lib/tls/i686/libc.so.6
#6 0x002f666c in fread() from /lib/tls/i686/libc.so.6
#7 0x08048c36 in X::f()
#8 0x08048ac0 in main()
Observe que __read_nocancel etc NO son identificadores C++ - mutilados: son solo nombres de funciones internas de C, utilizando las convensiones de guion bajo subrayado y mayúscula reservado o guión doble principal.
X::f()
era un identificador mutilado y ha sido recompuestos.
¿qué hay de los solaris, la toma de fotos simplemente no exige. ¿Debo imprimir la pila en una tubería y leer, exigir el mensaje? –
@dma: Código de ejemplo anterior: probado en Linux, pero debería funcionar en Solaris. Aclamaciones. –
Me gusta el enlace libstdC++. Pero no puedo, con buena conciencia, dar un +1 a algo que defiende el uso de 'popen()' como este. : P – asveikau
- 1. Dónde está el código fuente para Html.TextBoxFor
- 2. ¿Dónde está Model.py en el código fuente de Django?
- 3. ¿Dónde está el código fuente del navegador web de Android?
- 4. ¿Dónde está el código fuente del compilador de Java?
- 5. ¿Dónde está el código fuente del tipo python 'dict'?
- 6. ¿Dónde encontrar el código fuente de BitTorrent?
- 7. Dónde está el repositorio fuente mercurial.hg
- 8. Dónde está gnu lib math (libm) código fuente
- 9. ¿Dónde puedo encontrar un buen código fuente de C++?
- 10. C++ código fuente de vector
- 11. ¿Dónde está el código fuente de pypi, el índice del paquete Python?
- 12. Hudson "El código fuente no está disponible."
- 13. ¿dónde está un buen tutorial sobre cómo crear un paquete R con código fuente C++?
- 14. ¿Dónde está el código fuente de la extensión de idioma de GHC: "Flechas"?
- 15. ¿Dónde puedo encontrar el código fuente de System.Numerics.BigInteger?
- 16. ¿Dónde está el código fuente del visor de PDF nativo en Google Chrome?
- 17. ¿Dónde está el código fuente de Java para varios paquetes com.sun. * En Leopard?
- 18. ¿dónde está el código fuente de la biblioteca estándar en ocaml?
- 19. ¿Dónde se descarga el código fuente de Linux?
- 20. ¿Dónde puedo descargar el código fuente de "OpenGL"?
- 21. ¿De dónde puedo encontrar el código fuente del comando cp?
- 22. ¿Dónde comenzar a leer el código fuente de SQLite?
- 23. Dónde comenzar con el control de código fuente
- 24. ¿Dónde encontrar el código fuente JSSE/JCE de Java 6?
- 25. ¿Dónde puedo encontrar el código fuente de Flex?
- 26. ¿Dónde se define jQuery.ajax en el código fuente jQuery?
- 27. C# .net código fuente
- 28. ¿Dónde en la fuente PHP está el código para incrementar las cadenas?
- 29. ¿Dónde puedo encontrar el código fuente JDK 1.5?
- 30. ¿Cómo/dónde comenzar a leer el código fuente abierto?
no hay /usr/include/demangle.h en mi linux ... – Walter