我使用此编译器:http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev7.7z

码:

#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()就是这样-发生的最后一个错误,不是“我的最后一个函数成功了!”

08-06 12:54