Triệu chứng
Khi bạn nhập tên đối tượng của đối tượng được đặt ở một địa chỉ cố định trong cửa sổ xem trong trình gỡ lỗi Visual Studio, bạn nhận được thông báo giống như sau:
mã định danh object_name được xác định
Ví dụ: sự cố này có thể được sao chép biên dịch và chạy mã sau trên hệ thống dựa trên 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;
}
Nguyên nhân
Trong các phiên bản của Visual Studio, trình gỡ lỗi sử dụng địa chỉ tương đối thay vì địa chỉ tuyệt đối cho tất cả các biến. Điều này gây ra các biến được đặt cố định địa chỉ không được tìm thấy trong phạm vi trực tiếp cho khung xếp chồng hiện tại.
Giải pháp
Khắc phục sự cố này chỉ áp dụng cho Visual Studio 2015 Update 3. Nếu bạn muốn xem các địa chỉ tuyệt đối, bạn phải sử dụng Visual Studio 2015 Update 3 hoặc phiên bản mới hơn.
Khắc phục sự cố có sẵn để tải xuống từ Microsoft Download Center:
Microsoft đã quét vi rút, tệp này bằng cách sử dụng phần mềm phát hiện vi-rút mới nhất đã có vào ngày tệp được đăng. Tệp được lưu trữ trên máy chủ được tăng cường bảo mật giúp ngăn chặn mọi thay đổi trái phép với nó.