Visual Studio Debugger não é possível visualizar objectos com endereços fixos

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:

Transferir o pacote de correcção agora.

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.

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×