Могу ли я доверять значению локальной переменной при анализе дампа с помощью Windbg?

#c #debugging #windbg

#c #отладка #windbg

Вопрос:

Я вижу странные вещи, такие как значения указателя, изменяющие значения (0 или что-то допустимое) между 2 вызовами без изменений. То же самое и с перечисляемыми значениями. Значения просто пересылаются, никаких шансов на изменение. Дамп — это minidunp.

Комментарии:

1. В строке 3 ваше приведение недопустимо и вызывает неопределенное поведение. И еще, не говори i i .

Ответ №1:

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

Комментарии:

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

2. 0:001> ?? это; -> класс MyClass * 0xff7e5c8e; !адрес 0xff7e5c8e -> адрес ff7e5c8e не найден ни в одном VAD —-. Это результат повреждения памяти или оптимизации? Значение this ptr должно быть действительным, и у меня есть информация о куче в дампе

Ответ №2:

Вы можете использовать dv / V, чтобы определить, находится ли локальная переменная в регистре. Как здесь:

0:000> dv / v @ecx this = 0x0018fe10

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

Комментарии:

1. Спасибо. это то, что мне нужно. I способ определить, является ли var допустимым.