что значит «BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL» & quot; значит в windbg! проанализировать -v вывод

Я пытаюсь проанализировать файл аварийного дампа с помощью windbg и набрать команду расширения, чтобы получить некоторый базовый результат анализа «! Analysis -v», и получить результат следующим образом: — (Я вставил только часть информации здесь)

....
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 00000004
Attempt to read from address 00000004

PROCESS_NAME:  tscommand.exe

...

LAST_CONTROL_TRANSFER:  from 010444c2 to 010181e6

FAULTING_THREAD:  00002270

BUGCHECK_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL

PRIMARY_PROBLEM_CLASS:  NULL_CLASS_PTR_READ_AFTER_CALL

DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_READ_AFTER_CALL

STACK_TEXT:

...

Что здесь означает «BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL»? Означает ли это, что приложение является ошибкой из-за указателя класса NULL после вызова функции? Я ищу в сети, не могу найти ничего о APPLICATION_FAULT_NULL_CLASS_PTR_READ_AFTER_CALL.

1

Решение

«BUGCHECK_STR» — это классификация, используемая Microsoft для «классификации» ошибок, и эта, по-видимому, указывает на то, что у вас есть указатель класса NULL, что мне кажется правильным, поскольку чтение памяти происходит с адреса 4, который является небольшое смещение от основания нулевого указателя.

По сути, у вас возникает ситуация, когда вы используете указатель на что-то (я не уверен на 100%, что это класс как таковой), и указатель равен NULL в тот момент, когда вы разыменовываете его. Вполне возможно, что это вызвано вызовом функции-члена, и отладчик может выяснить это [глядя на комбинацию стека вызовов, символов и значений регистров], но WinDBG не знает, как получить эти вещи. время от времени это неправильно — это эвристика, так что это что-то вроде: «Если у нас есть это значение здесь, и это значение там, и что-то еще соответствует этому диапазону, то именно эта группа ошибок».

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

Из комбинации кода ошибки и дополнительных данных с ошибкой очевидно, что ваш код читает адрес 4 в памяти. Что обычно означает попытку использовать второе целое число или число с плавающей точкой в ​​классе / структуре, на которые указывает «NULL». Я видел это довольно много раз, когда я забыл «if (ptr! = NULL) …» в моем коде. Случается с большинством из нас время от времени …

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]