Я использую Code :: Blocks с Mingw уже много лет, со встроенным отладчиком (gdb) у меня возникают проблемы с указателем только тогда, когда у меня включена оптимизация, в противном случае он всегда знает этот указатель и может разыменовать его в любое время ,

нальный вопрос:

Почему указатель this равен 0 в сборке выпуска VS c ++?

При разрыве сборки выпуска Visual Studio 2008 с пакетом обновления 1 (SP1) с параметрами / Zi (компилятор: формат информации отладки - база данных программы) и / DEBUG (компоновщик: генерировать информацию об отладке, да), почему указатели «this» всегда 0x00000000?

РЕДАКТИРОВАТЬ: Перефразированный вопрос:

Мой оригинальный вопрос был довольно неясен, извините за это. При использовании отладчика Visual Studio 2008 для пошагового выполнения программы я вижу все переменные, кроме переменных-членов локального объекта. Вероятно, это связано с тем, что отладчик выводит их из указателя this, но VS всегда говорит, что это 0x00000000, поэтому он не может получить переменные-члены текущего объекта (он не знает позицию объекта в памяти)

При загрузке мегапамяти (подобно мини-дампу Windows, но содержащему все пространство памяти процесса) я могу просматривать все свои локальные переменные (определенные в функции) и целые древовидные структуры в куче, даже если у меня есть указатели.

Например: при взломе A :: foo () в режиме Release

'this' будет иметь значение 0x00000000
'f_' покажет мусор

Каким-то образом эта информация должна быть доступна для процесса. Это отсутствующая функция в VS2008? Любой другой отладчик, который обрабатывает это правильно?

class A
{
  void foo() { /*break here*/ }
  int f_;
};

Ответы на вопрос(8)

Ваш ответ на вопрос