Win32: как вылетать? - PullRequest
       38

Win32: как вылетать?

1 голос
/ 28 апреля 2010

я пытаюсь выяснить, где хранятся отчеты об ошибках Windows; Сегодня я нажал Отправить ранее, но я забыл, что хочу «просмотреть детали», чтобы я мог изучить мини-дампы памяти.

Но я не могу найти, где они хранятся (и Google не знает).

Итак, я хочу написать фиктивное приложение, которое будет аварийно завершать работу, показать диалоговое окно WER, позвольте мне нажать «просмотреть подробности», чтобы я мог добраться до папки, в которой сохранены дампы.

Как я могу потерпеть крах в Windows?

Редактировать: Причина, по которой я спрашиваю, заключается в том, что я попытался переполнить стек и с плавающей точкой делится на ноль. Переполнение стека делает приложение исчезающим, но диалоговое окно WER не появляется. Деление с плавающей запятой на ноль приводит к + INF, но без исключения и без сбоев.

Ответы [ 7 ]

4 голосов
/ 15 июля 2010

Вы, ребята, все так многословны! : -)

Вот компактный способ сделать это:

*((int*)0)=0;
2 голосов
/ 28 апреля 2010

Должно быть хорошее начало:

int main(int argc, char* argv[])
{
   char *pointer = NULL;
   printf("crash please %s", *pointer);
   return 0;
}
1 голос
/ 28 апреля 2010

Вы предполагаете, что дампы памяти все еще существуют. После отправки AFAIK дампы удаляются с машины.

Сами дампы должны находиться где-то в% TEMP%.

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

0 голосов
/ 18 января 2011

Интересно узнать, как рушится Windows. Но почему бы не взглянуть на

%allusersprofile%\Application Data\Microsoft\Dr Watson\ 

первый? Также обратите внимание на папки с аварийными данными для конкретных приложений, я обнаружил, например,

...\FirefoxPortable\Data\profile\minidumps\ 

и

...\OpenOfficePortable\Data\settings\user\crashdata\.
0 голосов
/ 18 января 2011

Официально поддерживаемые способы преднамеренного сбоя можно найти здесь:

http://msdn.microsoft.com/en-us/library/ff545484(v=VS.85).aspx

В основном:

Для USB-клавиатур необходимо включить вызванная клавиатурой авария в реестр. В разделе реестра HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters, создать значение с именем CrashOnCtrlScroll и установите его равным значение REG_DWORD 0x01.

Тогда:

Вы должны перезагрузить систему для этих настройки вступят в силу.

После этого клавиатура сбой может быть инициирован с помощью следующая последовательность клавиш: удерживайте нажатой крайняя правая клавиша CTRL и нажмите Дважды нажмите клавишу SCROLL LOCK.

Программирование не требуется;) Здесь не нужно изобретать колесо:)

0 голосов
/ 04 мая 2010
void crash(void)
{
    char* a = 0;
    *a = 0;
}
0 голосов
/ 28 апреля 2010

Не уверен, вызовет ли это диалоговое окно «Отчет об ошибках», но вы можете попробовать деление на ноль.

...