Не удается увидеть переменные при отладке x64-битной DLL в Visual Studio

Я пытаюсь выполнить программу C/C++ (MapServer) в Visual Studio, но не вижу локальные переменные.

Я создал новый проект, добавив основной .exe, который я собрал из исходного кода. Я могу установить точки останова и выполнить программу без проблем, но я не вижу, что хранится ни в одной из переменных. Я запускаю все это на виртуальной машине — хост-ОС — Windows 10, а виртуальная машина — Windows 7.

Программа:

  • построен как отладочная версия
  • не имеет оптимизаций
  • символы загружаются нормально

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

Пример отладчика x32 (первые 5 переменных правильные, остальные не заданы):

Рабочий сеанс отладки

Пример сеанса отладки x64 (обратите внимание, что программа работает нормально):

Сбой сеанса

Я думал, что это может быть связано с VS2008, поэтому я также пробовал в VS2015, но получил аналогичные (неудачные) результаты:

введите здесь описание изображения

Попытка доступа к переменным в Immediate Window приводит к:

// working VS2008 x32 build
map->name
0x00ffcb40 "WFS_server"

// VS2008 x64 build
map->name
0x0000000000000000 <Bad Ptr>

// VS2015 x64 build
map->name  
0x0000000000000000 <NULL>

Я пропустил некоторые настройки отладчика в Visual Studio, чтобы установить проект отладки на x64? Или есть какая-то проблема с кастингом в исходном коде, который производит это?

Любые указатели приветствуются.


person geographika    schedule 20.03.2016    source источник
comment
Вы можете попытаться восстановить установку VS (Программы и компоненты -> VS -> Изменить -> Восстановить). Я не знаю, сталкиваетесь ли вы с той же проблемой или с другим видом одной и той же проблемы, но когда я хотел проверить, могу ли я воспроизвести вашу проблему, я понял, что не могу запустить приложение с подключенным отладчиком. MSVSMON.exe просто не запускался (что еще более странно: он пытался использовать MSVSMON VS2010, в то время как я использовал VS2012). Исправление установки решило эту проблему (и, да, я прекрасно вижу значения всех переменных).   -  person Algirdas Preidžius    schedule 21.03.2016
comment
@AlgirdasPreidžius спасибо за предложение. У меня была чистая установка 2015 года, и я только что отремонтировал 2008 год без изменений. Все это работает на виртуальной машине, что, я думаю, может быть частью проблемы.   -  person geographika    schedule 21.03.2016
comment
Если вы снова видите 0xbaadfood в представлении отладки, это должно быть ошибка в отладчике, а не первая вещь, которую вы рассматриваете. В VS2008 и VS2015 также используются очень разные механизмы отладки. Повреждение кучи является очень распространенной ошибкой и имеет очень случайное поведение, поэтому не гарантируется, что это приведет к сбою программы.   -  person Hans Passant    schedule 21.03.2016
comment
@HansPassant - моя первая мысль, что мне не хватает некоторых настроек VS для включения 64-битной отладки. Во-вторых, есть некоторые проблемы с кодом. Относительно значения 0xbaadfood на скриншотах — они верны в том смысле, что для свойства fontset не установлено значение. Однако свойство name установлено и отображается в 32-битной версии.   -  person geographika    schedule 21.03.2016


Ответы (1)


Вышеупомянутое было вызвано тем, что stdrup устарел в Windows, а куча была повреждена.

О проблеме MapServer на GitHub можно узнать по адресу https://github.com/mapserver/mapserver/pull/5277

В этом вопросе также описывается похожая проблема: повреждение кучи с помощью strdup

person geographika    schedule 26.12.2016