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

时间:2008-10-01 21:42:42

标签: visual-studio debugging winapi

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

如何在不重新编译和重现故障的情况下获取错误值?在Watch窗口中输入“GetLastError()”不起作用(“语法错误”)。

3 个答案:

答案 0 :(得分:58)

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

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

您还可以在条件断点中使用$ err伪寄存器;因此,只有在最后一个错误为非零时才能中断一行代码。这可以是一个非常方便的技巧。

您可能会发现其他一些伪寄存器(来自John Robbins的优秀书籍,"Debugging Applications for Microsoft .NET and Microsoft Windows"):

  • $tib - 显示主题信息块
  • $clk - 显示时钟计数(对计时功能有用)。要更轻松地使用此功能,请放置$clk手表,然后再添加$clk=0手表。第二个监视器将在显示当前值后清除伪寄存器,因此下一步或步骤将为您提供仅执行该操作的时间。请注意,这是一个粗略的时序,包括相当多的调试器开销,但它仍然非常有用。

答案 1 :(得分:6)

观察窗口中的

ERR,hr通常可以解决问题

答案 2 :(得分:0)

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

作为奖励,您也可以将新代码留在那里。

如果你不能这样做,那么QBziZ是正确的“ERR,hr”就可以了。