0

我使用这个编译器: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必须为零。

4

1 回答 1

3

函数成功时不会重置错误是很常见的。并且完全有可能“SymInitialize”在内部调用了某个函数“在 dir1 查找文件,在 dir2 查找文件,...”,而“我在 dir1 中找不到它”的错误是 2。现在,您必须实际调用 SetLastError(0) 来清除错误代码,这可能是疏忽或有意 SymInitialize 中的代码没有设置它。您需要检查 SymInitialize 的结果以判断它是否成功。如果不成功,请查看错误代码。但是 GetLastError() 就是这样 - 发生的最后一个错误,而不是“我的最后一个函数是否成功!”

于 2013-02-03T11:55:30.367 回答