Окно памяти Visual Studio содержит только вопросительные знаки - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над аварийным сбросом стандартной программы на C ++.

У меня проблема со следующим фрагментом кода:

_variant_t* pvarTemp;
pvarTemp = <static_cast><_variant_t*> (pointer_array->GetAt(i));
if (!pvarTemp) continue;
pvarTemp->Clear();

Поскольку я предполагаю, что что-то не так в памяти, я решил взглянуть на окно памяти (меню «Отладка», «Windows», «Память», «Память 1»), где я ввел адрес памяти pvarTemp, но я видел только некоторые знаки вопроса.

Сам аварийный дамп - это просто небольшой аварийный дамп, в результате PYKD targetSystem().desc (в Windgb):

0:049> !py
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> print targetSystem().desc
User mini dump: C:\Temp_Folder\CRASH.DMP

Мой вопрос: в чем причина вопросительных знаков?

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

Какой из двух правил правильный?

1 Ответ

2 голосов
/ 26 июня 2019

Вы делаете посмертную отладку. Как правило, аварийные дампы не захватывают всю память, используемую процессом. Если вы попытаетесь проверить память, которая не была включена в дамп, вы увидите знаки вопроса.

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

...