сохранение состояния программы (visual studio 2008) - PullRequest
5 голосов
/ 24 мая 2011

Я отлаживаю (в Visual Studio 2008) утилиту, написанную на C ++. Объединение массивных входных файлов с моей медленной машиной, и может потребоваться более 6 часов, чтобы добраться до точки, где мне нужно наблюдать за выполнением программы на предмет нарушений.

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

Ответы [ 2 ]

5 голосов
/ 24 мая 2011

Я не уверен в возможностях в Visual Studio для таких действий, но если вы не можете ничего найти, я бы попытался использовать виртуальную машину и сохранить состояние машины. Вероятно, это будет ужасно медленно, но может помочь в долгосрочной перспективе. Удачи

0 голосов
/ 24 мая 2011

Вам нужен conditional breakpoint ... см. Этот URL для более подробной информации:

http://msdn.microsoft.com/en-us/library/7sye83ce%28v=VS.90%29.aspx

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

Если у вас DO есть точная точка, которую вы хотите вызвать, вы можете сделать программный разрывpoint DebugBreak (), которая вызовет исключение точки останова.Отладчик Visual Studio перехватит его и приостановит выполнение в этот момент.

Либо включите gflags, чтобы запустить программу с ADPlus, и в точке кода, которая, по вашему мнению, вызвала проблему, выдается исключение, которое не обрабатывается.Пусть сбой программы и ADPlus сгенерирует полный аварийный дамп памяти процесса.Тот факт, что у вас включен gflags, означает, что вы получите выделение памяти с хорошими границами вокруг них (обычно 0xCDCDCDCD) для легкой отладки.

Наконец, вы также можете использовать библиотеку DbgHelp.dll от Microsoft, чтобы создать мини-дамп, который может программно собирать различные уровни информации (без сбоев, как влечет за собой решение, приведенное выше).Требуемая функция: MiniDumpWriteDump .Вы можете написать обычный мини-дамп или полный дамп памяти, используя параметры.Это должно быть сделано из отдельного процесса, если это возможно (вы можете дождаться дескриптора в своем собственном процессе).

...