Что означает сообщение об ошибке 0xC000041D?

Что означает сообщение об ошибке 0xC000041D?

Я просматривал с помощью iexplore, и он вылетел с сообщением

C000041D

то есть

Необработанное исключение по адресу 0x7149B7C0 в iexplore.exe: 0xC000041D: во время обратного вызова пользователя произошло необработанное исключение.

AFAIK 0x означает шестнадцатеричный код, 714... это счетчик программ, а C00... это код ошибки. Что я могу сделать, чтобы исследовать эту ошибку? Я запустил Visual Studio, которая поймала программу.

Скриншот
(Нажмите на изображение, чтобы увеличить)

решение1

Я обнаружил, что 0xC000041d = STATUS_FATAL_USER_CALLBACK_EXCEPTION
Похоже, что приложение завершает работу с ненормальным кодом 0xc000041d из-за раннего создания потока приложением.
Нажмите, чтобы прочитать больше и увидеть источник..

решение2

0xC000041dэтоNTСТАТУСконстанта кода, определенная в Microsoftntstatus.hЗаголовочный файл:

Имя определения ( MessageId) STATUS_FATAL_USER_CALLBACK_EXCEPTIONи его описание:

"An unhandled exception was encountered during a user callback."

NTСТАТУСКоды обычно используются при передаче системной информации, например, между системой Windows и драйверами устройств, а иногда между Windows и приложениями:

ЗначениеNTСТАТУСКод также можно найти с помощью инструмента Microsoft Error Lookup Tool:

Как следует из описания, Windows использует этот конкретныйNTСТАТУСкод, когда он сталкивается с исключением (ненормальным состоянием) при вызове пользовательского режима (https://www.tutorialspoint.com/User-Mode-vs-Kernel-Mode) функция обратного вызова (https://en.wikipedia.org/wiki/Callback_(компьютерное_программирование)).

Есть много ситуаций, которые могут генерировать это сообщение. Поэтому, поиск в Интернете только наNTСТАТУСкод 0xC000041d, возможно, даст несвязанные результаты. Более релевантные результаты могут появиться, если также включить точное имя файла процесса (в данном случае iexplore.exe), неисправный модуль (см. ниже) и/или, возможно, даже точный адрес памяти (в данном случае 0x7149B7C0).

Поиск по полному адресу памяти может быть немного сложным из-за немного отличающихся версий компиляции/сборки программы, различных моделей выполнения (например, 32-разрядные и 64-разрядные версии Windows) и из-за того, что модули (файлы .dll, .exe, .sys и т. д., которые вместе составляют исполняемый программный код) загружаются по разным базовым адресам. Соответствия только последним четырем символам B7C0адреса может быть достаточно, чтобы указать на связанную проблему.

Чтобы фактически отладить проблему, можно использовать Visual Studio для просмотра стека вызовов потока, вызывающего исключение:

https://stackoverflow.com/questions/945193/how-do-i-find-the-stack-trace-in-visual-studio

Стек вызовов показывает различные модули и методы в этих модулях, которые вызывали друг друга в момент возникновения исключения. Имена модулей могут дать представление о том, что делала программа, когда возникла проблема.

Если символы (https://devblogs.microsoft.com/devops/understanding-symbol-files-and-visual-studios-symbol-settings/) доступны для модуля(ей), вызывающего проблему, и, возможно, даже файлы исходного кода этих модулей, отладка становится проще.

Связанный контент