避免使用多线程 C++ 优化变量

问题描述 投票:0回答:1

我正在用 C++ 编写一个程序,并且有一个正在使用

.detach();
的线程,当我尝试从中访问另一个线程时,调试器说响应已被优化,我无法访问它。 有什么办法可以“解决”这个问题吗?

这里有代码:

int foos;
unsigned int ReadProcess(HANDLE phandle, unsigned int address) {
    unsigned int Pointer;
    ReadProcessMemory(phandle, (void*)(address), &Pointer, sizeof(address), 0);
    return Pointer;
}

void foo()
{
    while (1) {
        if (foos == 1) { break; }
        volatile unsigned int xPointer, xBaseaddress = 0x002CF7DC, xoffset = 0x448, xoffset1 = 0x198, xoffset2 = 0x498, xoffset3 = 0x268, xoffset4 = 0x24;
        HANDLE phandle = GetProcessHandle("Speed Calculator");
        DWORD Base = (DWORD)GetBaseAddress(phandle);
        xPointer = Base + xBaseaddress; //xPointer optimized out here
        xPointer = ReadProcess(phandle, xPointer) + xoffset; //and here
        xPointer = ReadProcess(phandle, xPointer) + xoffset1; //and here
        xPointer = ReadProcess(phandle, xPointer) + xoffset2; //and here
        xPointer = ReadProcess(phandle, xPointer) + xoffset3; //and here
        xPointer = ReadProcess(phandle, xPointer) + xoffset4; //and here
        if (!SendMessage(textBox1, WM_SETTEXT, NULL, (LPARAM)("IS: ") + xPointer))//and because of that, here
            MessageBox(0, "Error: " + GetLastError(), "Error", MB_OK);
        Sleep(299);
    }
}

void main() {

                foos = 0;
                std::thread first(foo);
                first.detach();

}

我忽略了部分代码,因为它主要是 win32 API 交互。

c++ winapi optimization
1个回答
0
投票

已使用参数调用编译器,请求优化代码。

Visual Studio 示例

查看 Visual Studio 中的解决方案配置(可以在下拉列表中选择

Release
Debug
)。

如果更改为

Debug
,则不应优化变量,您可以看到发生了什么。

更改解决方案配置时,Visual Studio 会在调用编译器时设置该配置的参数。在这种情况下,我们更喜欢

/Od (Disabled)
标志而不是
Configuration properties→C/C++→Optimization→Optimization

在调试过程中,您还可以打开“线程”窗口来查看创建的线程。

© www.soinside.com 2019 - 2024. All rights reserved.