Что такое ошибка «неизвестное исключение программного обеспечения (0xc00000fd)» и как ее избежать? - PullRequest
6 голосов
/ 14 октября 2011

Я создал сценарий AHK с именем code_2, скомпилировал его и поместил в папку «Автозагрузка», чтобы он автоматически запускался при каждом включении компьютера.

Сценарий проверяет наличие обновлений на веб-сайте.и всякий раз, когда обнаруживается обновление на веб-сайте, оно загружает эти обновления с помощью UrlDownloadToFile.

Сначала казалось, что скрипт работает нормально, но недавно я начал получать на своем компьютере следующие сообщения после того, как мой скрипт был запущен дляпримерно 15 минут:

C: \ Documents and Settings \ Администратор \ 程式 開始 」表 \ 程式 code \ .exe \ code_2.exe: code_2.exe - 應用 程式 錯誤

例外 程式 發生 例外 неизвестная программная исключительная ситуация (0xc00000fd) 於 位置 0x7c92eddc。

請 按 [確定] 終止 程式

請 按 [取消] 進行 程式 偵錯

Есть идеи, о чем это сообщение?(Извините за китайский здесь, но я думаю, что если вы знаете это сообщение по его номеру, вы должны быть знакомы с его содержанием.)

В любом случае, вот переведенное сообщение:

C: \ Documents and Settings \ Администратор \ Меню Пуск \ Программы \ Запуск \ code_2.exe: code_2.exe - Ошибка приложения

Исключительная ситуация неизвестного программного исключения (0xc00000fd) произошла в приложении в расположении0x7c92eddc.

Нажмите OK, чтобы завершить программу
Нажмите CANCEL, чтобы отладить программу

1 Ответ

16 голосов
/ 14 октября 2011

Я считаю, что 0xc00000fd - это исключение переполнения стека (http://support.microsoft.com/kb/315937). Не видя ваш сценарий, трудно сказать наверняка, что идет не так, но обычно такого рода вещи возникают из-за слишком глубокой рекурсии.сценарий для любых рекурсивных функций и убедитесь, что они выходят, прежде чем достигнуть слишком большой глубины.

Возможно, вы фактически выделяете слишком много в стеке. Я не знаком с AHK, но возможноКомпилятор также выделяет большой объем данных (возможно, локальных переменных) в стеке. Если вы определите большое количество (или несколько больших) локальных переменных, это может произойти.

Также возможно, чтостек / память каким-то образом повреждаются, хотя при использовании языка сценариев это кажется менее вероятным. Это может быть более вероятно при доступе к нативному API из языка сценариев, в зависимости от того, как это делается.

Последняя возможность, которую я собираюсь предложить, это то, что вы звонитеome API и заставляет его выделять много места в стеке, возможно, путем передачи неверных параметров.Опять же, не зная больше подробностей (особенно того, что он делает, когда сталкивается с этим исключением), трудно сказать наверняка.

Я могу подумать о некоторых других причинах, но они еще менее вероятны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...