Отсутствие диалогового окна сбоя при сбое программы в Cygwin на Windows 7

Отсутствие диалогового окна сбоя при сбое программы в Cygwin на Windows 7

Когда в Windows 7 я запускаю консольную программу, которая должна аварийно завершить работу, у меня возникают следующие ситуации:

  • Если яДвойной кликна нем происходит сбой и "ваша программа дала сбой"открывается всплывающее диалоговое окно
  • Если я запущу его черезDOS-консоль, происходит сбой и появляется сообщение "ваша программа дала сбой"открывается всплывающее диалоговое окно
  • Если я запущу его черезКонсоль Cygwin, он тихо падает.Нет всплывающего диалогового окна

Обратите внимание, что в Windows XP все работает так, как и ожидалось (открывается всплывающее диалоговое окно...), и я могу отладить аварийно завершившуюся программу.

Это баг cygwin на Windows 7? Проблема конфигурации?

Разные данные

  • У меня Cygwin версии 1.7.5, но его удалось воспроизвести с помощью Cygwin 1.7.7.
  • Работает на WinXP, но не работает на Cygwin на Windows 7 (32 или 64-разрядной)
  • Диалог интересен для целей разработки/отладки.

Я написал следующую программу на C++ в Visual Studio 2008 в режиме отладки (32-битная или 64-битная версия дает одинаковый результат):

#include <cstdio>
#include <windows.h>

int main()
{
   printf("It should crash now...") ;
   ::DebugBreak() ;
   return 0 ;
}

Был ::DebugBreak()заменен на int * p = NULL ; *p = 42 ;(который, как предполагается, приводит к сбою с исключением нарушения прав доступа), с точно такими же результатами ошибок в Cygwin.

Спасибо !

решение1

Я наблюдал ту же проблему с последними версиями Cygwin. Я пока не знаю, что ее вызывает, но функция Windows SetErrorMode, похоже, работает отлично:

{
  const UINT oldErrorMode = ::SetErrorMode(0);
  ::DebugBreak();
  ::SetErrorMode(oldErrorMode);
}

Просто совет: если вы используете MSVC, используйте встроенную функцию __debugbreak(). Она помещает break в эту точку кода, а не внутрь функции, вызываемой оттуда. Некоторые встроенные ассемблерные коды могут делать этот трюк на других компиляторах.

Связанный контент