Backtraces-es

From AMule Project FAQ
Revision as of 04:28, 27 February 2008 by AnimAlf (Talk | contribs | merge | delete)

Jump to: navigation, search
English | Spanish

Introducción

Bien, no es duro imaginar, que esto va sobre las backtraces.

Generalmente, no suele ser necesario para un usuario normal realizarlo. Sin embargo, a veces podemos tener un mal día y la revisión CVS que estés manejando puede ser inestable. Aquí es donde entran las backtraces: Si tu aMule peta y muestra un "OOPS - aMule crashed", eso es lo que nos gustaría saber. Los backtrace que provee aMule no son muy útiles ya que proveen poca información por lo general, por lo que hay una forma mejor: un backtrace *real*.

El depurador GNU

Primero que nada, necesitar tener el Depurador GNU instalado. Se llama gdb puedes averiguar si lo tienes tecleando which gdb en una ventana de consola. Obtendrás un resultado como éste:

$ which gdb
/usr/bin/gdb

Si no tienes el GDB, Verás un mesaje similar a esta:

$ which gdb
which: no gdb in (/bin:/usr/bin:[etc])

Si es ese el caso, el Depurador GNU es muy probable que no esté instalado en tu sistema por lo que deberás instalarlo antes de continuar.

Si tu SO es Gentoo Linux sólo tienes que teclear esto:

# emerge -av gdb

Compilando aMule

Luego compilas aMule con los simbolos de depuración:

$ ./configure --enable-debug --disable-optimize --prefix=/donde/está/instalado/aMule
$ make
$ make install

Si no quieres sobreescribir tu anterior copia del aMule cambie ésto simplemente:

$ ./configure --enable-debug --disable-optimize
$ make

aMule puede funcionar entonces entrando el directorio src y tecleando ./amule

Si eres incapaz o no estás dispuesto a recompilar, o funcionas con la versión RPM, procede igualmente, pero se consciente que los backtraces con los símbolos de depurado son para nosotros mucho más útiles.

Crea un backtrace

Crea ahora en tu directorio home el archivo .gdbinit y pon las siguiente líneas en el (o puedes teclearlas en el prompt de (gdb) luego:

ha SIGPIPE nostop noprint pass
ha SIG32 nostop noprint pass
ha SIG33 nostop noprint pass
ha SIG34 nostop noprint pass

Para aquellos que quieran saber el significado de las líneas anteriores: la primera evita que GDB se detenga ante tuberias rotas; la segunda evita que GDB se detenga ante un nuevo hilo;

Para crear un backtrace, abra una consola y haga lo siguiente:

$ gdb $(which amule)
(gdb) run

Ahora utilice el aMule con normalidad hasta que pete. Si ocurre haga lo siguiente:

(gdb) bt
(gdb) bt full
(gdb) thread apply all bt

Envia la salidad de estos últimos tres comando al backtraces forum con algún comentario adicional sobre las circunstancias en que ocurrió el segfault y la verión del aMule que estás utilizando () Post the output of the last three commands in the backtraces forum with some additional comment about the circumstances the segfault happened and what aMule version you used (o la fecha del paquete CVS).

El archivo core

Si el ejecutable aMule ha sido compilado con los símbolos de depuración (--enable-debug configure flag), pero no lo estás haciendo funcionar con el GDB y peta, también hay un modo de generar elbacktrace, si tu sistema ha sido configurado para generar archivos core.

Los archivos core son imagenes de memoria del proceso que a petado. Tu sesión debe ser correctamente configurada para que el sistema genere el archivo core. Añade el siguiente comando al ~/.bashrc:

ulimit -c unlimited

Ahora, cuando un programa pete, se generará el archivo core.1234 (este nombre puede ser diferente, pero normalmente empezará con 'core') puedes introducirlo en el GDB así:

$ gdb --core=/path/to/amule /path/to/core/file/core.1234

y luego procede como en el problema de la sesión anterior 'bt' y 'bt full'.

Así que ya está, diviertete con el aMule

Saludos, Citroklar & Phoenix

(La mayoría de lo anterior fué cogido de un mensaje de texto en el foro backtraces. Gracias!)

Leete por favor esto para aprender más sobre GDB y Valgrind.

Links