Applies ToVisual Studio 2015 Update 3

Objawy

Wpisz nazwę obiektu, obiekt, który znajduje się w stały adres w oknie czujki w debugerze programu Visual Studio, pojawi się komunikat podobny do następującego:

Identyfikator nazwa_obiektu jest niezdefiniowana

Na przykład ten problem może być powielany przez kompilowania i uruchamiania w systemie x86 następujący kod:

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;
}

Przyczyna

We wcześniejszych wersjach programu Visual Studio debuger używany względnych adresów zamiast bezwzględnych adresów dla wszystkich zmiennych. Wywołało to zmienne, które znajdują się na stałe adresy nie można znaleźć w zakresach na żywo dla bieżącej ramki stosu.

Rozwiązanie

Ta poprawka dotyczy tylko programu Visual Studio 2015 aktualizacji 3. Jeśli chcesz wyświetlić adresy bezwzględne, należy użyć programu Visual Studio 2015 aktualizacji 3 lub nowszy.

Poprawka jest dostępna do pobrania w Microsoft Download Center:

Pobierz pakiet poprawki.

Firma Microsoft przeskanowała ten plik w poszukiwaniu wirusów przy użyciu najbardziej aktualnego oprogramowania do wykrywania wirusów, które było dostępne w dniu opublikowania pliku. Plik jest przechowywany na serwerach o podwyższonych zabezpieczeniach, które uniemożliwiają nieautoryzowane zmiany w nim.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.