2011-10-03 11 views
9

Necesito una forma de registrar el seguimiento de la pila de funciones en un registro de depuración para ayudarme a diagnosticar un defecto. El problema es que necesito implementar esto en Windows y Linux usando C++.Biblioteca para registrar la Pila de llamadas en tiempo de ejecución (Windows/Linux)

Después de un poco de investigación, he encontrado que:

  • Para la implementación de Windows, que se puede utilizar StackWalk64 función de la API y la familia.
  • En Linux, he encontrado libunwind que suena genial.
  • O, puedo usar de backtrace

glibc Antes de empezar a trabajar, quiero un consejo si este es el camino correcto y para preguntar si hay una biblioteca multiplataforma escrito ya que puede ayudar. Sospecho que no soy el primer programador que necesita esto. :)

+0

1 para una buena pregunta bien hechas! –

Respuesta

3

Google Breakpad maneja todo esto por usted si desea obtener volcados de emergencia del campo.

+1

Un volcado de emergencia contiene mucha más información que la que necesito. Y debe procesarse por correo: esto es un gran inconveniente. Simplemente necesito el seguimiento de pila como una cadena o una matriz de cadenas. – vlg789

+0

Tiene que posprocesar a menos que esté dispuesto a enviar PDB privados junto con su aplicación, y un minivolcado tiene el tamaño de un JPEG grande. –

+0

enviar PDB privados no es un problema. – vlg789

1

algunos años escribí esto: http://drdobbs.com/cpp/191100567

Básicamente algunas macros registrar el lugar donde el desenredo de pila ocurre cuando una excepción es aventado.

Una versión actualizada del marco se puede encontrar en la biblioteca Imebra (http://imebra.com)

+0

¿te refieres a macros de FUNCTION_START/FUNCTION_END? – vlg789

+0

Sí. Capturan, vuelven a generar y registran el paso de la excepción. –

Cuestiones relacionadas