Отладка с помощью файла дампа в VS2012

У меня есть приложение, которое отлично работает на всех машинах, кроме одного клиента. Я пошел на сайт и взял файл дампа ...

Я прочитал документацию и правильно создал .DMP, используя опцию «Дамп памяти ядра». Это создало файл ~ 300 МБ, и я открыл его с помощью VS2012. Я установил правильные пути как к исходным программам .pdb (файлы символов), так и к файлам символов Microsoft.

Источник, кажется, загружается и вставляет меня в следующий код для моего приложения:

namespace SqlEditor
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new SqlEditorForm(args)); // <- Stops HERE
        }
    }
}

Это выглядит нормально, поэтому я пытаюсь войти в исходный код приложения, нажав F11, и получаю:

Не в силах шагнуть. Эта операция не поддерживается при отладке файлов дампа.

Сейчас я прочитал много статей на эту тему, в том числе

http://wallaceturner.com/debugging-dump-files-created-on-another-machine

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

Как я могу пройти и выяснить, почему клиентская версия приложения не работает?

Спасибо за ваше время.


Примечание. Я также попытался нажать кнопку "Продолжить". Это дает:

Отладчик не может продолжить выполнение процесса. его операция не поддерживается при отладке файлов дампа.


person MoonKnight    schedule 03.12.2013    source источник


Ответы (1)


Файл дампа — это моментальный снимок во время захвата, поэтому для вас нет дополнительных действий.

person Lex Li    schedule 03.12.2013
comment
Лекс ли: Мне любопытно, почему это невозможно. Я имею в виду, что мешает Microsoft предоставить нам функцию, позволяющую восстановить процесс до точки, из которой был сделан снимок. Разве это не было бы действительно полезно (представьте, что мы находимся на той же машине, где был сделан дамп, и сейчас мы просто пытаемся оживить этот процесс) - person ankur; 08.07.2016
comment
@ankur этот вопрос касается только файла дампа. Если вы хотите воспроизвести процесс и устранить неполадки, у Microsoft есть что-то под названием TTT. - person Lex Li; 08.07.2016
comment
Я прохожу ТТТ. Но я не имел в виду повторить весь процесс. Я имел в виду возобновление его из состояния, в котором он вышел (или мы поручили управлению более высокого уровня создать дамп этого процесса). Просто упомянем, что все, что я собираюсь сделать, это создать дамп, потому что текущее потребление оперативной памяти моего процесса составляет, скажем, 1,2 ГБ, и теперь он ожидает файла (наблюдателя), и на той же машине будут выполняться другие задания. Итак, если я хорошо знаю, что текущий процесс может быть отложен на 2 часа, то я выгружу это --> запущу текущее задание --> перезагрузлю старый дамп до точно такого же состояния, а затем продолжу - person ankur; 08.07.2016
comment
@ankur вы не можете возобновить работу из дампа, так как он может быть с совершенно другой машины, а зависимости времени выполнения недоступны. Не мечтайте о чем-то нереальном. TTT на сегодняшний день является лучшим подходом, разработанным Microsoft и широко используемым ее ребятами из службы технической поддержки. - person Lex Li; 08.07.2016
comment
Я понимаю. Но мои требования немного другие, может быть, нереальные. Но я пытаюсь. И это привело меня сюда. но был бы какой-то способ, которым мы могли бы сохранить все о текущем состоянии процесса в плоском файле. И когда позволяют системные ресурсы, мы можем возобновить этот процесс именно из этого состояния. Любой совет? Мое приложение разработано .net 4 С# - person ankur; 08.07.2016
comment
@ankur опубликуйте свой вопрос отдельно и посмотрите, как отреагирует сообщество SO. - person Lex Li; 08.07.2016