Backtraces-es
Contents
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
(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.