Отладка программы MinGW с помощью gdb в Windows, не завершается при ошибке подтверждения - PullRequest
8 голосов
/ 24 апреля 2010

Как настроить gdb для окна, чтобы оно не позволяло завершить работу программы с ошибкой подтверждения? Я намерен проверить трассировку стека и переменные в программе.

Например, запуск этой программы test.cpp, скомпилированной с MinGW 'g++ -g test.cpp -o test' в gdb:

#include <cassert>
int main(int  argc, char ** argv) { assert(1==2); return 0; }

Дает:

$ gdb test.exe
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-mingw32"...
(gdb) r
Starting program: f:\code/test.exe
[New thread 4616.0x1200]
Error: dll starting at 0x77030000 not found.
Error: dll starting at 0x75f80000 not found.
Error: dll starting at 0x77030000 not found.
Error: dll starting at 0x76f30000 not found.
Assertion failed: 1==2, file test.cpp, line 2

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Program exited with code 03.
(gdb)

Я хотел бы иметь возможность остановить немедленное завершение программы, как это делает отладчик Visual Studio и GDB в Linux. Я выполнил поиск и нашел кое-что о сигналах перехвата, но не могу найти хороший пост о том, как настроить GDB для этого.

Ответы [ 3 ]

7 голосов
/ 25 апреля 2010

Обнаружено, что точку останова можно поместить в файл .gdbinit со строками:

set breakpoint pending on
b exit

Это устраняет необходимость ввода yes для окон.

6 голосов
/ 24 апреля 2010

Просто установите точку останова на выходе:

(gdb) b exit

1 голос
/ 17 марта 2017

Используя последние (март 2017 г.) msys2 с gcc 6.3 и gdb 7.12.1, вы должны использовать:

break _exit

т.е. используйте _exit, а не exit. Я ожидаю, что это будет работать и в других случаях, так как я ожидаю, что exit вызовет _exit для фактического выхода.

...