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

How to execute GetLastError() while debugging in Visual Studio

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

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


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

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

您也可以在条件断点中使用$ err伪寄存器。因此,仅当最后一个错误为非零时,才可以中断一行代码。这可能是非常方便的把戏。

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

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


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


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

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

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