#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 допустимым.