我用windbg调试了下列代码,整个进程是单线程的:
void ReadWriteBetween2(HANDLE hRead, HANDLE hWrite)
{
const int BUFSIZE = 4096;
TCHAR szBuf[BUFSIZE];
DWORD dwRead = 0;
DWORD dwWrite = 0;
for(;;)
{
if(!::ReadFile(hRead, szBuf, BUFSIZE, &dwRead, NULL) || dwRead == 0)
{
DWORD dwErr = GetLastError();
break;
}
if(!::WriteFile(hWrite, szBuf, dwRead, &dwWrite, NULL) || dwWrite == 0)
{
break;
}
}
}当即将要执行"DWORD dwErr = GetLastError();"这一行时,!gle 返回的结果如下图:执行完这一行后,发现dwErr是6.
我的问题是,为什么!gle命令的结果不是6?windbggle

解决方案 »

  1.   

    The !gle extension displays the last error value for the current thread.~*列出所有线程,确认一下线程是不是当前线程
      

  2.   

    看看!teb里的last error code是多少。
      

  3.   

    这个问题是有点怪。楼主能不能用汇编模式调试?不用源代码方式呢?
    看看在call GetLastError之前,!teb中的值是多少,然后再看一下!gle得到的是多少
      

  4.   

    我用!teb命令查看了一下,确实能够看到。截图如下:
      

  5.   

    这个不确定。
    要不楼主用!gle -all看一下,有没有lasterrorvalue是6的线程?