Чистый способ явного сбоя приложения?
В мое приложение встроена пользовательская обработка ошибок (см. Превосходную книгу Джона Роббинса о "Отладке приложений Windows"). Чтобы проверить эту функциональность, я всегда использовал функцию Windows DebugBreak(), и она всегда работала идеально. Но начиная с Windows 7, вызов этой функции просто говорит "Достигнута точка останова" и останавливает приложение без вызова моих обработчиков сбоев.
Я всегда мог поместить этот код в свое приложение, чтобы проверить функциональность сбоев:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
Или даже добавить несколько случаев, на случай, если 0xdeadbeef является действительным адресом:
int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;
Но мне было интересно: нет ли более чистого способа сбить ваше приложение под Windows?
2 ответа
Просто создать нулевой указатель на объект с некоторыми функциями-членами и попытаться вызвать одну из них? И, возможно, сделать это в функции, чтобы вы знали, что это дао
void CrashApp()
{
MyObject * ptr = 0;
ptr->Function();
}
Определенно самый простой способ и довольно ясно, что происходит
Вы можете использовать встроенную функцию __debugbreak() вместо функции DebugBreak(). Это ничего не говорит и вылетает с EXCEPTION_BREAKPOINT
RaiseException () - это еще один способ сбоя.