Точка исполнения находится внутри виртуальной функции. mDb — ссылка на обьект-член класса. У mDb тип CDbBackend&. Поток только один. Значения в красных прямоугольниках должны быть одинаковыми. Но они разные! Как такое может быть?
Отлаживаемый код был проинструментирован BoundsChecker. Разница в адресах позже проявляется как крах программы, потому что адрес, содержащийся в "b", указывает хоть и в адресное пространство процесса, но никакого обьекта CDbBackend там нет. Неинструментированный код ведёт себя как положено.
Ассемблер, сгенерированный для выражения b = &mDb, и его прохождение с регистрами -- здесь, это видеофайл размером 500k, записанный с экрана.
Здравствуйте, blackhearted, Вы писали:
PD>>Release ? Если да — не верьте ничему. Только вывод в лог дает правильные значения.
B>Хотя сложно уловить логику дебажить релиз
Тебе не доводилось сталкиваться с ситуацией, когда Debug работает, а Release — нет ? Если не доводилось — ты счастливый человек
Здравствуйте, blackhearted, Вы писали:
B>Так ,а что не устраивает?Работает и ок.
Не работает. Инструментированный код при исполнении аварийно завершается из-за явлений, которые я описал.
B>Если есть свободное время — поищите глюки дебагера B>Тем более версия студии осталась за кадром.
Здравствуйте, Аноним, Вы писали:
А>Всем привет,
А>Взгляните, пожалуйста, на скриншот дебаггера.
А>
А>Точка исполнения находится внутри виртуальной функции. mDb — ссылка на обьект-член класса. У mDb тип CDbBackend&. Поток только один. Значения в красных прямоугольниках должны быть одинаковыми. Но они разные! Как такое может быть?
А>Отлаживаемый код был проинструментирован BoundsChecker. Разница в адресах позже проявляется как крах программы, потому что адрес, содержащийся в "b", указывает хоть и в адресное пространство процесса, но никакого обьекта CDbBackend там нет. Неинструментированный код ведёт себя как положено.
А>Ассемблер, сгенерированный для выражения b = &mDb, и его прохождение с регистрами -- здесь, это видеофайл размером 500k, записанный с экрана.
А>Спасибо за любую идею.
Если без BoundChecker'а всё работает, нафиг его!
А вообще из видео я не смог понять причину проблемы. Чтобы сказать, где ошибка, нужно знать где изначально расположена переменная mDb. Из смещений на стеке это не понятно. В общем нужно пройтись в отладчике и посмотреть, в какой момент нужное значение "портится".
Здравствуйте, yaroslavp, Вы писали:
Y>Здравствуйте, blackhearted, Вы писали:
B>>Так ,а что не устраивает?Работает и ок.
Y>Не работает. Инструментированный код при исполнении аварийно завершается из-за явлений, которые я описал.
Ну значит ищите ,где расстреливается память.
Re: BoundsChecker и фантастика в дебаггере
От:
Аноним
Дата:
30.11.09 11:14
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Всем привет,
А что, адрес ссылки на объект (&mDB) должен быть равен адресу объекта? (p)