Estoy en Windows, ejecutando GDB en un ejecutable construido bajo MinGW. El programa tiene un ciclo infinito. Quiero encontrarlo presionando Ctrl-C. Cuando lo hago, tanto el programa como GDB salen. Toda la ayuda en este tema parece suponer que estoy en Linux.En GDB en MinGW, ¿cómo hacer que Ctrl-C detenga el programa?
Respuesta
Esto se debe a que gdb no maneja el evento ctrl-c del programa GUI (sin consola) correctamente. Puede encontrar la solución aquí http://www.mingw.org/wiki/Workaround_for_GDB_Ctrl_C_Interrupt
Para encontrar el bucle infinito, puede intentar recorrer la ejecución hasta llegar a una secuencia que se repite indefinidamente.
No estoy seguro, pero creo que Ctrl-C sólo debe detener la ejecución, no GDB sí ...
Creo que hay una "manija" de comandos que puede utilizar para controlar cómo la interrupción se maneja la señal.
Lo sé. Esperaba no tener que hacer eso. –
Tiene razón en ambos aspectos, pero no parece funcionar en un Windows DOS-box. –
¿Qué "shell" estás usando? Si utiliza el shell MSYS "rxvt", el comportamiento es más o menos como usted describe. Ctrl-C solo funciona si está ejecutando desde un símbolo del sistema normal de Windows.
Esa es información útil. Estoy en un símbolo del sistema de Windows, y no pareció funcionar, pero lo intentaré de nuevo. –
También puedes probar "Console2". Esto debería comportarse cerca del símbolo del sistema de Windows, pero es mucho más bonito. Uso gdb todo el tiempo con eso, y nunca tengo ningún problema. https://sourceforge.net/projects/console/ –
Acabo de llegar al mismo problema.
La solución del wiki es ejecutar debugbreak
con el pid del proceso depurado, pero ps
no muestra este pid, solo pid de gdb. Tal vez hay otra forma de obtenerlo.
Pero hay una solución más simple. Simplemente inicie el programa normalmente (no en gdb), marque pid desde ps
e inicie gdb con este pid como segundo argumento. Cuando se adjunta gdb, el proceso se detiene y puedo imprimir la traza inversa.
Gracias. Hace algún tiempo toqué esto: Hit^C y el depurador se detiene, pero se detiene en un hilo diferente al del programa principal. Si hago hilos de información , le dice el número de hilo del programa principal.Luego cambio a ese hilo, y puedo hacer 'bt' para mostrar la pila. Supongo que es totalmente obvio para cualquiera que realmente conozca GDB. –
Aquí es una solución que funciona todo el tiempo:
Cuando BGF comienza utilizar esta expresión regular para capturar el inferior Identificación del proceso:
"\[New Thread (\d+)\."
A continuación, utilice:
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, PID);
DebugBreakProcess(hProcess);
CloseHandle(hProcess);
Tener una Consulte la siguiente secuencia de comandos de inicialización de GDB, se requiere para que esto funcione con MinGW en Windows 7 y posterior:
# =====================================
# GDB preload initialization commands
# =====================================
# Set Unicode Charset
#set target-charset UCS-2
#set host-charset UCS-2
#set charset UCS-2
#set target-wide-charset UCS-2
# Set UTF-8 Charset
set target-charset UTF-8
set host-charset UTF-8
set charset UTF-8
set target-wide-charset UTF-8
# Request async target mode
set target-async 1
# Do not complain about pending breakpoints
set breakpoint pending on
# Enable All-Stop for all Threads
set non-stop off
# Do not ask for confirmations
set confirm off
# Do not create new console for output/logging
set new-console off
# Turn-off paggination to allow integration with IDE
set pagination off
# Call Stack files (and anywhere else) should be absolute path
set filename-display absolute
# Enable Pretty Print in GDB Panel
set print pretty on
# Enable notification of completion for asynchronous execution commands.
set exec-done-display on
# Show Addresses in objects, required for integration with IDE
set print address on
# Enable Pretty Print for Arrays
set print array on
# Flatten objects, required for integration with IDE
set print object off
# Include static members, required for integration with IDE
set print static-members on
# Show demangled vtable, required for integration with IDE
set print vtbl off
set print demangle on
set demangle-style gnu-v3
# Print full eight-bit characters, required for integration with IDE
set print sevenbit-strings off
# Set path for obj files
path $(TARGET_ROOT)/obj
# Load gdb scripts for STL (string, vector, map, etc.)
source $(PATH_SDK_DEBUGGER)/stl-views-1.0.3.gdb
# List of source code files
dir $(PATH_SDK_COMMON)
dir $(PATH_SDK_FRAMEWORKS)
dir $(PATH_SDK_INCLUDES)
dir $(PROJECT_PATHS.NATIVE_COMMON)
# Load the binary
file $(TARGET_OUTPUT)
Como señaló Matthew Talbert, esto sucede cuando se usa GDB con la herramienta de trabajo MinGW nativa dentro de MSYS/Cygwin. Iniciar gdb con winpty funcionó como un hechizo ya que es una herramienta diseñada solo para eso. También funcionó para cdb.exe
- 1. Redirección de entrada en gdb (MinGW)
- 2. ¿Cómo puedo hacer que Visual Studio se rompa justo antes de que se detenga el programa?
- 3. ¿Cómo uso el depurador mingW gdb para depurar un programa C++ en Windows?
- 4. Agregar gdb a MinGW
- 5. ¿Cómo hacer que gdb salga si el programa tiene éxito, se rompe si el programa falla?
- 6. ¿Cómo hacer que Xcode4 se detenga en NSAssert failure?
- 7. Usando gdb, detenga el programa cuando esté usando cualquier función del archivo X
- 8. Depuración del programa MinGW con gdb en Windows, no termina en la falla de afirmación
- 9. gdb: Programa salido con el código 030000000375
- 10. no se puede depurar el programa pequeño en eclipse helios cdt usando mingw/gdb en Windows, la consola se congela
- 11. Hacer que Qt Creator use MinGW
- 12. ¿Cómo hacer que el programa C espere (en Linux)?
- 13. ¿Cómo hacer "cola este archivo hasta que el proceso se detenga" en Bash?
- 14. ¿Cómo hacer que el elemento flotante fijo se detenga en #footer?
- 15. ¿Cómo puedo hacer que gdb guarde el historial de comandos?
- 16. ¿Cómo hacer que grep se detenga en la primera coincidencia en una línea?
- 17. Hacer que mingw-get se instale correctamente - Falta la ruta mingw/msys y más!
- 18. ¿Cómo hacer que la ejecución se detenga, duerma, espere X segundos en R?
- 19. ¿Cómo puedo hacer que NetBeans no se detenga en la primera línea con xdebug?
- 20. ¿Cómo se puede hacer que Perl se detenga al hacer referencia a un valor undef?
- 21. ¿Cómo compilar y ejecutar un programa C/C++ en el sistema Android (como MinGW en Windows)?
- 22. ¿cómo puedo poner un punto de interrupción en "algo está impreso en el terminal" en gdb?
- 23. GDB: cómo averiguar desde dónde salió el programa
- 24. gdb: programa de salida sin salir de gdb
- 25. ¿Cómo hacer que el programa Java sea instalable?
- 26. __uint128_t en mingw gcc
- 27. cómo hacer que el programa sea capaz de instalar
- 28. ¿Cómo decirle a Boost.Test que se detenga en el primer caso de prueba que falla?
- 29. ¿Obtener señales SIGTRAP aleatorias (en MinGW-gdb) es un signo de corrupción de memoria?
- 30. std :: runtime_error que falta en qt + MinGW
Hola, gracias. ¡Lo probaré! –
Lástima que solo puede usar la solución alternativa para depurar un programa de Windows. En cuanto a mí, estoy depurando un programa de Android :( – Qwertie