Является ли состояние, отображаемое в дампе сбоя приложения, точным в Windows при получении из диспетчера задач?

По сути, приложение зависло в образе VMWare (Win764), поэтому я создал дамп сбоя приложения с помощью диспетчера задач. Это создало аварийный дамп просто отлично. Затем я открыл аварийный дамп с помощью WinDbg, связываясь с символами, который работал отлично, так как теперь я мог видеть все потоки, процессы и стек вызовов. Когда я нажимаю на элемент в стеке вызовов, он открывает окно в WinDbg, показывая фактическую строку кода в исходном файле, в которой он находился для этой части стека вызовов.

Теперь мой вопрос: насколько точна / достоверна информация, отображаемая в WinDbg при отладке таким способом? Похоже, что иногда состояние, в котором показано приложение, вообще не имеет никакого смысла … как будто оно показывает невозможные сценарии или сценарий, которого никогда не было на 100%. Например, я видел, что это показывает, что операция началась и завершилась, но когда я проверяю файлы журнала, которые были написаны правильно, показывая, что операция никогда не происходила. Это регистрирует, что это никогда не случалось, и это успешно двигалось дальше после. Кроме того, конечный результат операции, если бы она была завершена, абсолютно не произошел. Вполне очевидно, что операция действительно началась и произошла.

Возможно ли когда-нибудь, что аварийные дампы просто неверны или каким-либо образом показывают старую информацию?

0

Решение

Любой дамп, который я видел до сих пор, был правильным в том смысле, что он точно показывал процесс во время взятия дампа. Но есть некоторые вещи, которые нужно помнить:

  • убедитесь, что вы смотрите на исходный код correc, который действительно соответствует версии дампа. Я часто сталкивался с такой ситуацией: я смотрю на неправильную версию исходного кода, и у меня сложилось впечатление, что такая ситуация никогда не произойдет.
  • если приложение что-то испортило (например, стек), вы также увидите только поврежденные вещи в дампе, что иногда может вводить в заблуждение. Вы должны выяснить сами, доверяете ли вы тому, что видите.
  • если приложение выглядит замороженным, оно все равно может иметь изменяющиеся стеки, потому что оно находится в бесконечном цикле. Возьмите несколько дампов замороженного приложения, чтобы посмотреть, что изменится.
  • вывод журнала может быть неактуальным (как уже было сказано Хансом Пассантом) по нескольким причинам: либо буфер не был очищен, либо приложение разбило файл журнала, перезаписав имя файла, уничтожив дескриптор файла и т. д.
0

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

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