Symptômes
Lorsque vous tapez le nom de l’objet d’un objet qui se trouve à une adresse fixe dans la fenêtre Espion du débogueur de Visual Studio, vous recevez un message semblable au suivant :
identificateur object_name n’est pas défini
Par exemple, ce problème peut être reproduit en compilant et exécutant le code suivant dans un système basé sur le 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;
}
Cause
Dans les versions antérieures de Visual Studio, le débogueur utilisé par des adresses relatives au lieu d’adresses absolues pour toutes les variables. Ce qui provoquait des variables qui sont situés à des adresses fixes se trouve ne pas dans les plages direct pour le frame de pile actuel.
Résolution
Ce correctif s’applique uniquement aux 3 mise à jour de Visual Studio 2015. Si vous souhaitez afficher les adresses absolues, vous devez utiliser Visual Studio 2015 mise à jour 3 ou une version ultérieure.
Le correctif est disponible pour téléchargement à partir du Microsoft Download Center :
Microsoft a analysé ce fichier contre les virus à l'aide des logiciels de détection de virus les plus récents disponibles à la date à laquelle le fichier a été validé. Le fichier est stocké sur des serveurs sécurisés, empêchant toute modification non autorisée sur celui-ci.