Sintomas
Quando escreve o nome do objecto de um objecto que está localizado num endereço fixo na janela de monitorização no Visual Studio Debugger, recebe uma mensagem semelhante à seguinte:
Identificador nome_objecto está definido
Por exemplo, este problema pode ser reproduzido por compilar e executar o seguinte código num sistema baseado em 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;
}
Causa
Em versões anteriores do Visual Studio, o depurador utilizados endereços relativos em vez de endereços absolutos para todas as variáveis. Isto faz com que variáveis que estão localizadas em endereços fixos não seja encontrado nos intervalos vivos para a moldura actual da pilha.
Resolução
Esta correcção aplica-se apenas ao Visual Studio 2015 actualizações 3. Se pretender ver endereços absolutos, tem de utilizar o Visual Studio 2015 actualizações 3 ou posterior.
A correcção está disponível para transferência a partir do Microsoft Download Center:
A Microsoft analizou este ficheiro para a presença de vírus, utilizando o software de detecção de vírus mais atual, que estava disponível na data em que o ficheiro foi publicado. O ficheiro está armazenado em servidores com segurança melhorada, que ajudam a evitar alterações não autorizadas.