2011-10-14 9 views
5

Stworzyłem skrypt AHK o nazwie code_2, skompilowałem go i umieściłem w moim folderze startowym, aby automatycznie uruchamiał się za każdym razem, gdy włączam komputer.Co to jest błąd "nieznany wyjątek oprogramowania (0xc00000fd)" i jak go uniknąć?

Ten skrypt sprawdza niektóre witryny internetowe pod kątem nowych aktualizacji, a po wykryciu aktualizacji na stronie internetowej pobiera te aktualizacje za pomocą UrlDownloadToFile.

Początkowo scenariusz wydawał się działać dobrze, ale ostatnio zaczął otrzymywać następujące komunikaty z komputera po moim skrypt został uruchomiony przez około 15 minut:

C: \ Documents and Settings \ Administrator \ 「開始」 功能 表 \ 程式 集 \ 啟動 \ code_2.exe: code_2.exe - 應用 程式 錯誤

應用 程式 發生 例外 wiadomo wyjątkiem oprogramowania (0xc00000fd) 於 位置 0x7c92eddc

請 按 [確定].終止 程式

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

Każdy pomysł co tę wiadomość wszystkim chodzi? (Niestety, dla Chińczyków tutaj, ale myślę, że jeśli znasz ten komunikat po jego numerze, znasz jego zawartość).

W każdym razie, tu jest tłumaczenie tej wiadomości wykonanej przez Google Translate:

C: \ Documents and Settings \ Administrator \ "Start" Menu \ Programs \ Startup \ code_2.exe: code_2.exe - Błąd aplikacji

Aplikacja wystąpiła wyjątek nieznany wyjątek oprogramowania (0xc00000fd) na pozycji 0x7c92eddc.

Nacisnąć [OK] zakończenia programu tłoczenia [Anuluj] programowania debugowania

Odpowiedz

15

wierzę, że 0xc00000fd jest stosem przelewowy wyjątek (http://support.microsoft.com/kb/315937) . Nie widząc swojego scenariusza, trudno jest stwierdzić z całą pewnością, co się dzieje, ale ten typ rzeczy jest zwykle spowodowany zbyt głęboką recursingiem. Sprawdziłbym twój skrypt pod kątem wszelkich funkcji rekursywnych i upewnił się, że wychodzą przed osiągnięciem zbyt dużej głębokości.

Możliwe, że faktycznie przeznaczasz zbyt dużo na stos. Nie jestem zaznajomiony z AHK, ale możliwe jest, że kompilator alokuje dużą ilość danych (prawdopodobnie zmiennych lokalnych) na stosie. Jeśli zdefiniujesz dużą liczbę (lub dużą liczbę) zmiennych lokalnych, może się to zdarzyć.

Jest również możliwe, że stos/pamięć jest w jakiś sposób uszkodzona, chociaż wydaje się, że jest to mniej prawdopodobne w przypadku używania języka skryptowego. Może być bardziej prawdopodobne, gdy uzyskujesz dostęp do natywnego API z języka skryptowego, w zależności od tego, jak to się robi.

Ostatnią możliwą opcją, którą tu zasugeruję, jest to, że wywołujesz niektóre API i sprawiasz, że alokuje dużo miejsca na stosie, prawdopodobnie przekazując złe parametry. Ponownie, nie wiedząc więcej szczegółów (szczególnie, co robi, kiedy trafia w ten wyjątek), trudno powiedzieć na pewno.

Mogę wymyślić kilka innych powodów, ale są one jeszcze mniej prawdopodobne.

+1

Dziękujemy! Myślę, że przekleństwo zbyt głęboko jest moim problemem. – brilliant

Powiązane problemy