2012-01-20 13 views
8

Hay muchos hilos creados en mi aplicación. algunos de los nombres de los hilos son visibles en el gdb mientras ejecuto el comando 'hilos informativos', otros no se muestran. Cómo conseguir todo el nombre propio hilo en lugar del valor hexadecimal como 0xb7fe1424gdb cómo obtener el nombre del hilo mostrado

4 Thread 0xb68ffb70 (LWP 18377) 0xb7fe1424 in __kernel_vsyscall() 
* 3 Thread 0xb7291b70 (LWP 18375) JKMainT (arg=0x0) at mylib.cpp:482 
2 Thread 0xb7a92b70 (LWP 18374) 0xb7fe1424 in __kernel_vsyscall() 
1 Thread 0xb7a94730 (LWP 18371) 0xb7fe1424 in __kernel_vsyscall() 
+0

Para añadir más .. pongo punto de rotura en mylib.cpp: 482, y en la línea que crea un hilo. – Whoami

+1

Ese no es el nombre del subproceso, ese es el nombre de la función que ese subproceso se está ejecutando actualmente. –

Respuesta

8

hilos no tienen nombres por defecto - la cadena JKMainT no es el nombre de la función actual.

Intente seleccionar uno de los hilos y ver la traza inversa, eso podría darle una buena idea de qué hilo es. De lo contrario, puede probar prctl con PR_SET_NAME si está disponible.

+4

una forma más fácil de hacerlo es pthread_setname_np (pthread_t *, const char *) – manylegged

4

Si actualiza a gdb 7.3 o posterior, "hilo de información" mostrará los nombres de los hilos; al menos en Linux nativo (no remoto).

4

Puede establecer el nombre del hilo a través de llamadas api POSIX no estándar. GDB (y otros depuradores) mostrarán estos nombres.

En Linux

// watch out, 16 char limit on the name 
pthread_setname_np(pthread_self(), "My thread name"); 

En Mac

pthread_setname_np("My thread name"); 
Cuestiones relacionadas