#include <windows.h>
#include <iostream>
#include <imagehlp.h>
int main() {
HANDLE process = GetCurrentProcess();
if (GetLastError()) {
printf("GetCurrentProcess failed: %d\n", GetLastError());
return 1;
}
if (!SymInitialize(process, NULL, TRUE)) {
printf("SymInitialize failed: %d\n", GetLastError());
return 1;
} else if (GetLastError()) {
printf("SymInitialize returned true but failed nonetheless: %d\n", GetLastError());
return 1;
}
}
它返回:
SymInitialize returned true but failed nonetheless: 2
错误2表示“系统找不到指定的文件。”什么文件,我不能在这里放在任何上下文中。我从文档中了解到,如果此函数成功,则GetLastError必须为零。
最佳答案
函数成功后不重置错误是很常见的。并且“ SymInitialize”在内部完全有可能调用某些函数“在dir1查找文件,在dir2查找文件,...”,而“我在dir1中找不到它”的错误是2。现在,您必须实际调用SetLastError(0)来清除错误代码,这可能是疏忽大意,还是有意使SymInitialize中的代码未设置该错误代码。您需要检查SymInitialize的结果以判断是否成功。如果未成功,请查看错误代码。但是GetLastError()就是这样-发生的最后一个错误,不是“我的最后一个函数成功了!”