debugging ubuntu gdb pthreads

debugging - gdb: no se pueden encontrar nuevos hilos: error genérico



ubuntu pthreads (6)

"Si agrega flag -lpthread a gcc (o g ++) mientras vincula su aplicación, se eliminará el problema y desaparecerá". Source

Cuando ejecuto GDB contra un programa que carga un archivo .so que está vinculado a pthreads, GDB informa del error "No se pueden encontrar nuevos subprocesos: error genérico".

Tenga en cuenta que el ejecutable que ejecuto no está vinculado con pthreads.

¿Alguna pista?

$ gdb --args lua -lluarocks.require GNU gdb (GDB) 7.0-ubuntu Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/lua...(no debugging symbols found)...done. (gdb) run Starting program: /usr/bin/lua -lluarocks.require Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require ''ev'' [Thread debugging using libthread_db enabled] Cannot find new threads: generic error (gdb) q A debugging session is active. Inferior 1 [process 4986] will be killed. Quit anyway? (y or n) y

Esta función se llama en require ''ev'' :

http://github.com/brimworks/lua-ev/blob/master/lua_ev.c#L25-65

Información adicional sobre mi sistema:

$ uname -a Linux localhost 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 04:38:19 UTC 2010 x86_64 GNU/Linux

$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 9.10 Release: 9.10 Codename: karmic


Descubrí que gdb puede adjuntarse al proceso después de que se haya completado el enlace en tiempo de ejecución a la biblioteca pthreads.


Esto también funciona:

LD_PRELOAD = / lib / libpthread.so.0 gdb --args ./app


Los usuarios de Ubuntu de 64 bits deberían hacer esto:

LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb --args ./app


Parece que a GDB no le gusta cuando la aplicación "de repente" se vuelve dependiente de pthreads.

La única solución que he encontrado es vincular la aplicación host con pthreads.

Que es bastante triste ...


También puede crear un .gdbinit en su directorio de inicio que contenga este texto:

set env LD_PRELOAD /lib/libpthread.so.0