在Visual Studio中进行调试时如何执行GetLastError()

时间:2020-03-06 14:59:58  来源:igfitidea点击:

我们正在逐步执行C / C ++代码,并且刚刚调用了失败的Win32 API(通常通过返回一些无用的通用错误代码,例如0)。代码不会进行后续的GetLastError()调用,我们可以检查其返回值以获取更多错误信息。

如何在不重新编译和再现故障的情况下获得错误值?在"监视"窗口中输入" GetLastError()"无效("语法错误")。

解决方案

监视窗口中的" ERR,hr"通常可以解决问题

"编辑并继续"添加代码,以便我们可以看到错误(只是不要创建新的全局变量来存储它)。如果我们可以快速调用执行这种错误处理代码的预先存在的函数,则效果很好。

另外,我们也可以在将来保留新代码。

如果我们不能执行此操作,则QBziZ是正确的" ERR,hr"。

如前所述,伪伪寄存器@err将显示最后一个错误值,伪错误@ err,hr将显示为字符串(如果可以)。

根据Visual Studio团队成员Andy Pennell的说法,从VS 7(Visual Studio .NET 2002)开始,使用'@'字符表示伪寄存器已被弃用,因此他们更喜欢使用'$'(如$ err,hr)。暂时同时支持$和@。

我们也可以在条件断点中使用$ err伪寄存器。因此,只有在最后一个错误为非零的情况下,我们才能中断代码行。这可能是一个非常方便的把戏。

我们可能会发现其他一些方便使用的伪寄存器(摘自John Robbins的出色著作,"为Microsoft .NET和Microsoft Windows调试应用程序"):

  • $ tib-显示线程信息块
  • $ clk-显示时钟计数(用于计时功能)。为了更容易地使用它,先放置一个$ clk手表,然后再放置一个$ clk = 0手表。第二只手表将在显示当前值后清除伪寄存器,因此我们进行的下一步骤或者下一步骤仅给我们时间进行该操作。请注意,这是一个艰难的时机,其中包括相当多的调试器开销,但它仍然非常有用。