我正在用c ++编写一个程序,我使用的是一个使用.detach()的Thread;当我尝试从它访问另一个线程时,调试器说响应已经优化,我无法访问它。 有没有办法“修复”那个?感谢
这里有代码:
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交互。
答案 0 :(得分:0)
已使用参数调用编译器,请求优化代码。
在Visual Studio中查看您的解决方案配置(您可以选择Release
或Debug
下拉列表。
如果您更改为Debug
,则不应对变量进行优化,您可以看到正在发生的事情。
更改解决方案配置时会发生的变化是Visual Studio在调用编译器时设置该配置的参数。在这种情况下,我们更喜欢/Od (Disabled)
的{{1}}标记,而不是Configuration properties→C/C++→Optimization→Optimization
。
在调试期间,您还可以打开"线程"窗口以查看创建的线程。