Симптоми
Когато въведете името на обекта на обект, който се намира на фиксиран адрес в прозореца за наблюдение в дебъгера на Visual Studio, получавате съобщение, което е подобно на следното:
Забележка
идентификатор object_name е недефиниран
Например този проблем може да се възпроизведе чрез компилиране и изпълнение на следния код на базирана на x86 система:
Relocate.asm
.586
.MODEL FLAT
PUBLIC _fixed_struct
_fixed_struct = 04000000h
END
Main.cpp
#include <Windows.h>
#define SHM_ADDRESS 0x04000000
#define SHM_SIZE_BYTES 1024
#define SHM_NAME L"TEST_NAME"
extern "C"
{
extern struct fixed_struct_type {
int a;
int b;
int c;
} fixed_struct;
}
void AttachShm()
{
HANDLE mapfile = CreateFileMapping(
INVALID_HANDLE_VALUE, // current file handle (use System page file)
NULL, // default security (not inheritable)
PAGE_READWRITE, // read/write permission
0, // size of File (high-order doubleword)
SHM_SIZE_BYTES, // size of File (low-order doubleword)
SHM_NAME); // name of mapping object
MapViewOfFileEx(
mapfile, // handle to mapping object
FILE_MAP_ALL_ACCESS, // read/write permission
0, // address offset (high-order doubleword)
0, // address offset (low-order doubleword)
SHM_SIZE_BYTES, // size of common block
(LPVOID)SHM_ADDRESS); // suggested starting address
}
int main(int argc, char* argv[])
{
AttachShm();
fixed_struct.a = 30;
// Put a breakpoint on the next line, view fixed_struct.a in watch window
return 0;
}
Причина
В по-старите версии на Visual Studio дебъгерът използваше относителни адреси вместо абсолютни адреси за всички променливи. Това беше причина променливи, които са разположени на фиксирани адреси, да не бъдат намерени в динамичните диапазони за текущия кадър на стека.
Решение
Тази корекция се отнася само за Visual Studio 2015 Update 3. Ако искате да виждате абсолютни адреси, трябва да използвате Visual Studio 2015 Update 3 или по-нова версия.
Корекцията е достъпна за изтегляне от Центъра на Microsoft за изтегляния:
Изтеглете корекционния пакет сега.
Иск за сканиране на вируси
Microsoft е сканирал този файл за вируси, като е използвал най-актуалния софтуер за откриване на вируси, наличен към датата на публикуване на файла. Файлът се съхранява на сървъри с повишена сигурност, които помагат да се предотвратят неразрешени промени в него.