2012-05-04 11 views
14

sé la respuesta a esto, lo estoy poniendo aquí para que otros puedan ver queLa depuración multihebra Eclipse CDT no es óptima: ¿cómo se ejecutan subprocesos exclusivamente?

Si utiliza Eclipse CDT, es probable que entender que el eclipse no es un depurador, es sólo una aplicación front final, específicamente a GDB. Entonces, al depurar programas C++, en realidad solo está usando GDB de una manera más cómoda. Si alguna vez tiene que depurar un programa multiproceso en eclipse CDT, se dará cuenta de que las cosas se vuelven agitadas rápidamente porque cuando llega a un punto de interrupción, todos los hilos se detienen, y cuando uno intenta ejecutar una sola línea en un hilo específico, también se ejecuta los otros hilos. Para que funcione correctamente, los hilos deben poder ejecutarse de manera arbitraria y exclusiva, de modo que cuando el programador ejecuta una sola línea, solo ejecute el hilo específico.

Por lo tanto, de forma predeterminada, la configuración de gdb de forma predeterminada deja el "bloqueo del planificador" desactivado. Si depura las aplicaciones multiproceso, comprenderá que debe estar activado en GDB para lograr el comportamiento deseado. ¿Cómo se puede ejecutar este comando:

set scheduler-locking on 

en GDB dentro de Eclipse CDT?

Respuesta

3

Tal vez si se agrega el siguiente script BGF que podría establecer la variable cuando el programa se detiene y lo apaga si continúa:

define hook-step 
set scheduler-locking on 
end 
define hookpost-step 
set scheduler-locking off 
end 
define hook-run 
set scheduler-locking off 
end 
define hook-continue 
set scheduler-locking off 
end 
+2

¿Cómo ejecutas exactamente el script GDB desde dentro de Eclipse? – rbaleksandar

3

Al menos una forma de hacerlo que sin duda resuelve el problema es saber cómo navegar por el inmenso conjunto de características que ofrece eclipse. Normalmente, cuando se inicia un programa, eclipse CDT cambia la ventana de la consola (si la tiene abierta, normalmente está en la parte inferior) para mostrar la entrada/salida del programa.

Pero puede cambiar esto si no lo sabe-vea esto image. Ese botón en el penúltimo a la derecha, el azul que se parece a un monitor, puede seleccionar la consola de entrada GDB. Se discutió también en this thread.

Desde allí simplemente escriba el comando.

resuelto, pero necesitan una mejor solución

Pero ahora que esto ha sido resuelto, para resolverlo de una mejor manera como una cuestión de conveniencia; tener que escribir establecer el bloqueo del programador cada vez que se inicia un programa es una tontería. Pero el problema con la carga de un archivo gdbinit es que el archivo gdbinit se obtiene antes de que eclipse establezca el programa para gdb. Esto es un problema, ya que hace que la vista del depurador se cuelgue dentro de eclipse, ya que gdb se queja. Para comprender lo que está sucediendo, intente arrancar gdb y luego dele el comando sin cargar un binario para ejecutar. No funciona, entonces, ¿cómo se configura esto como una opción pegajosa?

+0

Hola Adam, ninguna respuesta todavía? – ransh

+0

Bueno, supongo que lo que estoy buscando es que los desarrolladores de eclipse CDT se den cuenta de lo que tenía que decir; No soy un programador de eclipse. Un botón de algún tipo hubiera sido agradable –

+0

Gracias, ¿también vieron el comportamiento que después de eliminar todos los puntos de interrupción todavía se detiene en el mismo lugar? – ransh

Cuestiones relacionadas