Чистый способ явного сбоя приложения? - PullRequest
1 голос
/ 02 сентября 2010

В мое приложение встроена настраиваемая обработка при сбое (см. Превосходную книгу Джона Роббинса «Отладка приложений 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 ]

1 голос
/ 03 апреля 2011

Вы можете использовать __debugbreak () встроенную вместо функции DebugBreak ().Это ничего не говорит и вылетает с EXCEPTION_BREAKPOINT

RaiseException () - это еще один способ сбоя.

1 голос
/ 02 сентября 2010

Просто создать нулевой указатель на объект с некоторыми функциями-членами, попробовать и вызвать одну из них? И, возможно, сделать это в функции, чтобы вы знали, что это дао

void CrashApp()
{
    MyObject * ptr = 0;
    ptr->Function();
}

Определенно самый простой способ и довольно ясно, что происходит

...