c++ - oxygen - eclipse zip
La depuración multiproceso de Eclipse CDT no es óptima: ¿cómo se ejecutan los subprocesos exclusivamente? (2)
Sé la respuesta a esto, lo pongo aquí para que otros lo vean.
Si usa eclipse CDT, es probable que comprenda que eclipse no es un depurador, es solo una aplicación, especialmente para GDB. Por lo tanto, al depurar programas en C ++, en realidad solo estás 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 ponen agitadas rápidamente porque cuando llega a un punto de interrupción, todos los subprocesos se detienen, y cuando uno intenta ejecutar una sola línea en un subproceso específico, también se ejecuta. los otros hilos Para que funcione correctamente, los subprocesos deben poder ejecutarse de manera arbitraria y exclusiva, de modo que cuando el programador ejecuta una sola línea, solo ejecute el subproceso específico.
Por lo tanto, de forma predeterminada, la configuración de gdb deja el "bloqueo del programador" desactivado por defecto. Si depura aplicaciones de multiproceso, comprenderá que esto debe estar activado en GDB para que se logre el comportamiento deseado. ¿Cómo se ejecuta este comando:
set scheduler-locking on
en GDB dentro de eclipse CDT?
Al menos una forma de hacerlo que 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 puedes cambiar esto si no sabías, ve esta image . Ese botón en el segundo a la derecha, el azul que parece un monitor, puede seleccionar la consola de entrada GDB. Fue discutido también en este hilo .
A partir de ahí simplemente escriba el comando.
RESUELTOS, PERO NECESITAN UNA MEJOR SOLUCIÓN
Pero ahora que esto se ha resuelto, resuélvalo de una mejor manera por conveniencia; tener que teclear el bloqueo del programador cada vez que se inicia un programa es una tontería. Pero el problema al cargar un archivo gdbinit es que el archivo gdbinit se obtiene antes de que eclipse haya configurado el programa para que gdb lo resuelva. Esto es un problema, ya que hace que la vista del depurador se cuelgue dentro de eclipse, como se queja gdb. Para entender lo que está sucediendo, intente iniciar gdb, luego ejecute el comando sin cargar un binario para ejecutar. Falla, entonces, ¿cómo se establece esto como una opción que es pegajosa?
Tal vez si agrega la siguiente secuencia de comandos gdb que podría establecer la variable cuando el programa se detiene y la desactiva 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