Me he encontrado con algunos problemas para depurar un proceso de subprocesos múltiples utilizando GDB. Tengo un proceso de subprocesos múltiples que se astilla en varios (8 o 9) subprocesos diferentes, y estoy tratando de determinar cuál es el contenido de las variables cuando se llama al constructor para una clase llamada XML_File_Data. Sin embargo, me encontré con un problema donde, después de aplicar el punto de corte de la función correcta a todos los hilos y es aparente que uno de los puntos de corte del hilo es golpeado (el programa detiene temporalmente la ejecución), no puedo determinar qué hilo golpear el punto de quiebre El comandoDeterminar el hilo correcto para depurar en GDB
(gdb) thread apply all where
me está dando la información sorprendentemente inútil en la forma:
#0 0x004ab410 in __kernel_vsyscall()
#1 0x05268996 in nanosleep() from /lib/libc.so.6
#2 0x052a215c in usleep() from /lib/libc.so.6
#3 0x082ee313 in frame_clock_frame_end (clock=0xb4bfd2f8)
at frame_clock.c:143
#4 0x003a349a in ??()
#5 0x00b5cfde in thread_proxy()
from /cets_development_libraries/install/lib/libboost_thread-gcc41-mt-1_38.so.1.38.0
#6 0x02c1f5ab in start_thread() from /lib/libpthread.so.0
#7 0x052a8cfe in clone() from /lib/libc.so.6
De los 9 procesos, 7 o así me están dando casi exactamente que la producción, y la información sobre la última 2 ISN Realmente es mucho más útil (las funciones que se encuentran muy abajo de la pila de llamadas tienen nombres reconocibles, pero las funciones recientes # 0- # 4 no son reconocibles).
Esto es lo que tengo hasta ahora:
(gdb) gdb
(gdb) gdb attach <processid>
(gdb) thread apply all 'XML_File_Data::XML_File_Data()'
y (después de que el punto de ruptura es golpeado)
(gdb) thread apply all where
Podrían otras depuradores experimentados me ofrecen algunos consejos sobre lo que estoy haciendo mal o qué normalmente se hace en esta situación?
Saludos, Charlie
EDIT: Afortunadamente, pude descubrir que la causa de la ?? 's se ha optimizado código de ejecución a través del depurador, además de no ejecutar el depurador en el directorio del archivo ejecutable. Sin embargo, aún no hay mucho éxito con la depuración.